本文是參考廖雪峯老師的Git資料再加上我本身對Git的理解,記錄個人Git學習歷程,做下此文是爲之後學習,工做,開發中若是遇到問題能夠回過頭來參考參考。由於水平有限,不免會有出錯的地方,歡迎指正。前端
$git config --global user.name "你的名字"
$git config --global user.email "你的郵箱"
複製代碼
global
表示全局,這臺機器全部的Git倉庫都會使用這個配置。容許單個倉庫使用其餘的名字和郵箱。node
.git
文件git init
本來本地倉庫只包含着工做區,這是最多見的工做狀態。此時,git init
一下,表示在本地區域建立了一個.git
文件,版本區創建。git add .
表示把工做區的全部文件所有提交到版本區裏面的暫存區git add ./xxx/
一條一條分批添加到暫存區。git commit -m "xxx"
把暫存區的全部文件提交到倉庫區,暫存區空空蕩蕩。git remote add origin https://github.com/name/name_cangku.git
把本地倉庫與遠程倉庫鏈接起來。git push -u origin master
把倉庫區的文件提交到遠程倉庫裏。nothing to commit, working tree clean
之前不熟悉git命令的時候,我提交項目到github上都是直接在網頁上直接拉取文件提交上去的。有點羞恥。 git
git init
.初始化,表示把這個文件變成Git能夠管理的倉庫。初始化後打開隱藏的文件能夠看到有一個.git
文件。git add .
後面的一個點表示把這個文件所有提交到暫存區。git add ./readme.md/
表示把這個文件下面的readme.md文件提交到暫存區。git commit -m "你要評論一點什麼東西"
git commit
的意思是把暫存區的所有文件提交到本地倉庫。-m
後接評論。git remote add origin https://github.com/name/name_cangku.git
表示把你本地的倉庫與GitHub上的遠程倉庫鏈接起來。只須要鏈接一次,之後提交的時候就能夠不用謝這條命令了。name
是你的github名字,name_cangku
是你的倉庫名。注意不要把後面的.git
給漏掉了。由於我前面就是這麼走過來的,繞了不少彎路。至於如何在GitHub上新建倉庫,網上有不少教程,這裏再也不贅述了。git push -u origin master
把本地倉庫提交到遠程倉庫。(最後一步)在你的遠程倉庫上刷新一下就能夠看到你提交的文件了。git commit -m ""
以前,能夠重複git add
到暫存區。可是git commit
會把你以前存放在暫存區的所有文件一次性所有提交到本地倉庫。提交一個文件,有時候咱們會提交不少次,在提交歷史中,這樣就產生了不一樣的版本。每次提交,Git會把他們串成一條時間線。如何回溯到咱們提交的上一個版本,用git reset --hard + 版本號
便可。 版本號能夠用git log
來查看,每一次的版本都會產生不同的版本號。回溯以後,git log
查看一下發現離咱們最近的那個版本已經不見了。可是我還想要前進到最近的版本應該如何?只要git reset --hard + 版本號
就行。退一步來說,雖然咱們能夠經過git reset --hard + 版本號
,靠記住版本號來能夠在不一樣的版本之間來回穿梭。可是,有時候把版本號弄丟了怎麼辦?git reflog
幫你記錄了每一次的命令,這樣就能夠找到版本號了,這樣你又能夠經過git reset
來版本穿梭了。程序員
git checkout -- file
。廖雪峯老師指出撤銷修改就回到和版本庫如出一轍的狀態,即用版本庫裏的版本替換工做區的版本。git add
到暫存區了。想撤銷怎麼辦?回溯版本,git reset --hard + 版本號
,再git checkout -- file
,替換工做區的版本。git commit
到了master
。跟場景2同樣,版本回溯,再進行撤銷。git add
一個文件到暫存區,而後在工做區又把文件刪除了,Git會知道你刪除了文件。若是你要把版本庫裏的文件刪除,git rm
而且git commit -m "xxx"
.git checkout --<file>
就能夠。這再次證實了撤銷命令其實就是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。分支,就像平行宇宙,廖雪峯老師如是說。你建立了一個屬於你本身的分支,別人看不到,還繼續在原來的分支上正常工做,而你在本身的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工做。github
git push -u origin master
提交就是增長一條時間軸,master也會跟着移動。
建立一個other的分支,經過other提交,雖然時間軸向前走了,可是主分支master還在原來的位置。
理論分析完,看一下命令怎麼寫。面試
other
,切換到other
分支。git branch other
git checkout other
複製代碼
git branch
複製代碼
* other
master
複製代碼
當前的分支會有一個*
安全
other
提交git add ./xxx/
git commit -m "xxx"
複製代碼
other
分支完成,切換回master
git checkout master
複製代碼
other
的文件,由於分支尚未合併。git merge other
複製代碼
other
分支。git branch -d other
複製代碼
other
已經
commit
了,
可是此時指針指回
master
時,而且
master
沒有合併,而是
git add / commit
提交了。這樣,就產生了衝突,主分支
master
文件內容與
other
分支的內容不同。合併不起來!因此,
git add
git commit
提交。git log --graph
查看分支合併圖git branch -d other
刪除分支,任務結束。git merge --no-ff other
禁用Fast forward
模式,由於使用Fast forward
模式,刪除分支後,分支歷史信息會丟失。廖雪峯老師提到,工做中每一個bug均可以經過一個新的臨時分支來修復,修復後,合併分支,而後將臨時分支刪除。但若是你手上有分支在工做中,你的上級要你改另外的分支的BUG。你要把如今正在工做的分支保存下來,
git stash
,把當前工做現場「存儲」起來,等之後恢復後繼續工做。當你解決BUG後,git checkout other
回到本身的分支。用git stash list
查看你剛剛「存放」起來的工做去哪裏了。此時你要恢復工做:bash
git stash apply
恢復卻不刪除stash
內容,git stash drop
刪除stash
內容。git stash pop
恢復的同時把stash內容也刪了.git stash list
查看,看不到任何stash
內容。git branch -d + 分支
有可能會刪除失敗,由於Git會保護沒有被合併的分支。git branch -D + 分支
強行刪除,丟棄沒被合併的分支。git remote
查看遠程庫的信息,會顯示origin
,遠程倉庫默認名稱爲origin
git remote -v
顯示更詳細的信息git push -u origin master
推送master
分支到origin
遠程倉庫。git push -u origin other
推送other
到origin
遠程倉庫。git pull
把最新的提交從遠程倉庫中抓取下來,在本地合併,解決衝突。在進行git pull
git pull
也失敗了,還要指定分支之間的連接,這一步Git會提醒你怎麼作。而後再git pull
。
廖雪峯老師的總結:多人協做的工做模式一般是這樣:app
首先,能夠試圖用git push origin <branch-name>
推送本身的修改;分佈式
若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull
試圖合併;
若是合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin <branch-name>
推送就能成功!
若是git pull
提示no tracking information
,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
git rebase
把分叉的提交歷史「整理」成一條直線,看上去更直觀.缺點是本地的分叉提交已經被修改過了。git push -u origin master
rebase
的目的是使得咱們在查看歷史提交的變化時更容易,由於分叉的提交須要三方對比。好比一個APP要上線,一般在版本庫中打一個標籤(tag), 這樣,就肯定了打標籤的版本。未來不管何時,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。因此,標籤也是版本庫的一個快照。
Git的標籤雖然是版本庫的快照,但其實它就是指向某個commit的指針。
tag
其實就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一塊兒。好比tag v2.1
就是把歷史上的一個版本的東西叫作v2.1
步驟:
git branch
查看當前分支,git checkout master
切換到master
分支。git tag <name>
打標籤,默認爲HEAD
。好比git tag v1.0
commit
上的。若是想要打標籤在之前的commit
上,要git log
找到歷史提交的commit
id.commt id
是du2n2d9
,執行git tag v1.0 du2n2d9
就把這個版本打上了v1.0
的標籤了。git tag
查看全部標籤,能夠知道歷史版本的tag
git show <tagname>
查看標籤信息。git tag -a <標籤名> -m "<說明>"
,建立帶說明的標籤。 -a
指定標籤名,-m
指定說明文字。用show
能夠查看說明。git tag -d v1.0
刪除標籤。由於建立的標籤都只存儲在本地,不會自動推送到遠程。因此,打錯的標籤能夠在本地安全刪除。git push origin <tagname>
推送某個標籤到遠程git push origin --tags
一次性推送所有還沒有推送到遠程的本地標籤git tag -d v1.0
先刪除本地標籤v1.0。git push origin :refs/tags/v1.0
刪除遠程標籤v1.0git config --global color.ui true
讓Git顯示顏色,會讓命令輸出看起來更醒目.gitignore
文件,把須要忽略的文件名填進去。Git就會自動忽略這些文件。我也在學習中遇到過這樣的問題,好比node_modules
文件就能夠忽略。忽略文件原則:忽略操做系統自動生成的文件,好比縮略圖等; 忽略編譯生成的中間文件、可執行文件等,也就是若是一個文件是經過另外一個文件自動生成的,那自動生成的文件就不必放進版本庫,好比Java編譯產生的.class文件; 忽略你本身的帶有敏感信息的配置文件,好比存放口令的配置文件。
git add -f <file>
git check-ignore -v <file>
檢查爲何Git會忽略該文件。git rebase
時,你給它一個「外號」,就叫它git nb
。之後你能夠經過git nb
來代替git rebase
。具體怎麼轉換能夠去廖雪峯老師的網站看。由於水平有限,我以爲先把正常的Git命令搞清楚來就很不錯了。git config --global user.name "你的名字"
讓你所有的Git
倉庫綁定你的名字git config --global user.email "你的郵箱"
讓你所有的Git
倉庫綁定你的郵箱git init
初始化你的倉庫git add .
把工做區的文件所有提交到暫存區git add ./<file>/
把工做區的<file>
文件提交到暫存區git commit -m "xxx"
把暫存區的全部文件提交到倉庫區,暫存區空空蕩蕩git remote add origin https://github.com/name/name_cangku.git
把本地倉庫與遠程倉庫鏈接起來git push -u origin master
把倉庫區的主分支master
提交到遠程倉庫裏git push -u origin <其餘分支>
把其餘分支提交到遠程倉庫git status
查看當前倉庫的狀態git diff
查看文件修改的具體內容git log
顯示從最近到最遠的提交歷史git clone + 倉庫地址
下載克隆文件git reset --hard + 版本號
回溯版本,版本號在commit
的時候與master
跟隨在一塊兒git reflog
顯示命令歷史git checkout -- <file>
撤銷命令,用版本庫裏的文件替換掉工做區的文件。我以爲就像是Git
世界的ctrl + z
git rm
刪除版本庫的文件git branch
查看當前全部分支git branch <分支名字>
建立分支git checkout <分支名字>
切換到分支git merge <分支名字>
合併分支git branch -d <分支名字>
刪除分支,有可能會刪除失敗,由於Git
會保護沒有被合併的分支git branch -D + <分支名字>
強行刪除,丟棄沒被合併的分支git log --graph
查看分支合併圖git merge --no-ff <分支名字>
合併分支的時候禁用Fast forward
模式,由於這個模式會丟失分支歷史信息git stash
當有其餘任務插進來時,把當前工做現場「存儲」起來,之後恢復後繼續工做git stash list
查看你剛剛「存放」起來的工做去哪裏了git stash apply
恢復卻不刪除stash
內容git stash drop
刪除stash
內容git stash pop
恢復的同時把stash內容也刪了git remote
查看遠程庫的信息,會顯示origin
,遠程倉庫默認名稱爲origin
git remote -v
顯示更詳細的信息git pull
把最新的提交從遠程倉庫中抓取下來,在本地合併,和git push
相反git rebase
把分叉的提交歷史「整理」成一條直線,看上去更直觀git tag
查看全部標籤,能夠知道歷史版本的taggit tag <name>
打標籤,默認爲HEAD
。好比git tag v1.0
git tag <tagName> <版本號>
把版本號打上標籤,版本號就是commit
時,跟在旁邊的一串字母數字git show <tagName>
查看標籤信息git tag -a <tagName> -m "<說明>"
建立帶說明的標籤。 -a
指定標籤名,-m
指定說明文字git tag -d <tagName>
刪除標籤git push origin <tagname>
推送某個標籤到遠程git push origin --tags
一次性推送所有還沒有推送到遠程的本地標籤git push origin :refs/tags/<tagname>
刪除遠程標籤<tagname>
git config --global color.ui true
讓Git顯示顏色,會讓命令輸出看起來更醒目git add -f <file>
強制提交已忽略的的文件git check-ignore -v <file>
檢查爲何Git會忽略該文件廖雪峯老師講Git講的通俗易懂,對小白很友好。認認真真花上兩天時間去整理,會有所收穫的。廖老師的我的網站傳送門
歡迎訪問個人博客,會分享一些技術文章,一塊兒學習前端。