提交代碼的正確步驟「git客戶端使用安裝教程」

分支管理

Git中比較最重要的一點就是分支的概念,有了分支就有了合併和衍合的操作,「合併」「衍合」能夠「有效的對代碼版本的管理」

Git的初始化中有一條默認的主分支叫做master,每一次的提交都會串成一條時間線,這就是一條分支,當前分支由HEAD指針指向:

深入淺出圖解Git,入門到精通(保姆級教程)

當每次發生代碼提交的時候,當前指向就會向前形成一個新的版本,假如再創建一個新的分支bran,並且當前的提交指向新的分支,這樣新的分支隨著時間的推移就會形成許多版本:

深入淺出圖解Git,入門到精通(保姆級教程)

當新分支開發完後,提交倉庫,併合併到主幹master,最後刪除bran分支,這樣就完成了一次個人的開發:

深入淺出圖解Git,入門到精通(保姆級教程)

所以,假如主分支上只建立一條分支的話,分支的合併是非常快速的,只需要移動master分支到當前提交,然後將HEAD指針指向master,最後刪除bran分支就完成了。

但是,事實上並不是這樣的,在一個多人協作的開發團隊中,往往每個人都會建立自己的分支,有自己的提交,最後合併到主幹,當自己提交的時候,遠程倉庫代碼就會存在自己本地倉庫並未有的代碼,這樣就會導致push失敗。

例如:程序員Tom和Jerry同時遷出代碼,他們的初始代碼分支都如下圖所示:

深入淺出圖解Git,入門到精通(保姆級教程)

當Tom開發自己的業務模塊,提交代碼並且合併到主幹後,遠程主幹分支如下圖所示:

深入淺出圖解Git,入門到精通(保姆級教程)

「遠程倉庫master已經不再指向gs234,而是新生成了一個版本dfd453,作為當前指向的版本」

與此同時,Jerry的本地也同時開發完自己的模塊後,分支如下圖所示:

深入淺出圖解Git,入門到精通(保姆級教程)

在Jerry的本地環境中,他的「本地倉庫master還是指向gs234」,Jerry在自己新建立的一個分支bran中進行開發,開發完後合併分支,最後master就會指向ed489。

當Jerry再次提交代碼,Git就會檢查遠程倉庫與Jerry的本地倉庫,進行對比後,發現遠程倉庫存在Jerry的本地倉庫不存在的代碼,就需要Jerry將遠程倉庫執行git pull後,自行解決衝突。

上面說了分支基本原理,已經管理分支出現的問題,下面我們就來一步一步的深入操作分支的基本命令。

新建分支

Git新建一個分支的命令為:git branch <分支名字>,新建立後分之後,切換分支的命令為:git checkout <分支名字>。

新建分支的實質:「就是新建立一個引用,指向當前提交,master就好比一個引用」;切換分支的實質:就是將HEAD由指向原來的引用,重新指向要切換的分支的引用上:

深入淺出圖解Git,入門到精通(保姆級教程)

當然上面創建分支並且合併分支的兩條命令可以合併成一條命令:git checkout -b <分支名字>

當切換分之後,每次commit提交代碼時HEAD指針就會跟隨著新的bran分支移動,形成bran分支上的每一個版本:

深入淺出圖解Git,入門到精通(保姆級教程)

假如,在新的bran分支上開發到某一個版本,再次切換回master分支進行開發就會形成分叉:

深入淺出圖解Git,入門到精通(保姆級教程)

查看分支

當分支創建好了,你可以通過:git branch,來查看自己本地的分支情況:

深入淺出圖解Git,入門到精通(保姆級教程)

分支前面帶有*號的表示當前的分支,查看分之後,你就可以很清楚的知道自己要checkout哪條分支了。

合併分支

開發完自己模塊後,後面就會在自己本地進行合併分支,合併分支的命令:git merge <分支名字>,它表示「合併指定的分支到當前分支」,比如:當前分支為master,執行:git merge bran,表示合併bran分支到當前master分支上。

分支合併也會有失敗的情況,當你的兩條分支都修改的相同的文件,這時候Git就無法判斷你要保留哪一個修改,就會出現merge衝突。

例如:我先在master分支修改README.md文件,然後提交本地倉庫:

深入淺出圖解Git,入門到精通(保姆級教程)

然後切換回分支dev,再次修改README.md文件,再次提交

深入淺出圖解Git,入門到精通(保姆級教程)

最後進行合併分支,此時在你兩次修改的README.md文件中就會出現兩次修改的衝突代碼:

深入淺出圖解Git,入門到精通(保姆級教程)

因為你兩次修改同一文件的操作,合併後Git並不知道你要保留哪一次的操作,所以它就會將這個決定交給你自己決定,它只告訴你文件中哪裡的代碼衝突了,具體怎麼改就由你自己去弄。

深入淺出圖解Git,入門到精通(保姆級教程)

刪除分支

最後是刪除自己新建的分支,通過:git branch -d <分支名字>,進行刪除分支,假如分支刪除不了,可以通過:git branch -D <分支名字>,強制刪除分支:

深入淺出圖解Git,入門到精通(保姆級教程)

Git中刪除分支的實質:dev只是一個分支的引用,所以刪除分支也就是刪除這個引用,並不會刪除任何conmit,所以刪除操作也是非常高效的。

假如一條分支commit的引用被刪除,那麼這條分支的就沒有任何引用指向,這樣就會找不到這條分支,最後就會被Git回收機制回收。

查看遠程

在多人協作的團隊下,你可能要隨時查看遠程倉庫的情況,可以通過:git remote,進行查看,加上-v參數可以查看遠程倉庫的詳細情況。

git remote
git remote -v

推送分支

深入淺出圖解Git,入門到精通(保姆級教程)

分支的推送到遠程上一節已經提過,使用git push命令就可以進行分支的推送,命令後面加上分支的命令,表示具體推送哪條分支:

git push origin master // 將本地master分支推送到遠程庫

拉取分支

分支的拉取使用git pull命令,這條命令相當於以下兩條命令:

git fetch
git merge

但是一般實際工作中,都可能會直接使用git pull命令:

深入淺出圖解Git,入門到精通(保姆級教程)

分支管理策略

在合併分支的時候,Git會以快速合併的模式進行合併(Fast forward),但是這種模式刪除分支後,會丟失分支的信息。

Git中還可以以「普通模式」進行合併,在原來git merge命令後面加上–no-ff參數即可,合併的命令如下:

$ git merge --no-ff -m "message" dev

臨時存取工作區的改動

在開發中,若是某一時刻你想把當前的改動臨時進行存放起來,可以使用git stash命令,它表示將改動的文件存儲到一個獨立的存儲區域,並不會被提交,當再次需要的時候可以隨時取出來。

這裡要注意的是:「git stash的是改動的文件,也就是被Git追蹤的文件,新添加的文件並沒有被Git追蹤,所以git stash並不會stash」

深入淺出圖解Git,入門到精通(保姆級教程)

git stash命令也可以加上save命令後面再加上備註信息,方便查看:

git stash save "備註信息"

git stash成功後「本地的工作目錄的代碼會和本地倉庫一樣」,git stash後可以通過git stash list命令查看之前stash的歷史記錄,當再次需要將改動的文件取出來時候,可以通過以下命令:

git stash pop

git stash pop表示「彈出第一個被stash的記錄,並且該stash會從歷史記錄中刪除」;也可以使用git stash apply命令「彈出stash,但是這條命令stash仍然會保存在stash歷史記錄中」,你也可以通過:git stash drop命令來刪除。

深入淺出圖解Git,入門到精通(保姆級教程)

這一篇就只講解了Git的分支原理以及Git的臨時存取操作,限於篇幅,我們今天就到這裡,

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/273264.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:05
下一篇 2024-12-17 14:05

相關推薦

發表回復

登錄後才能評論