1. 程式人生 > 其它 >Git-03-分支操作

Git-03-分支操作

檢視分支 git branch
建立分支 git branch 分支名
切換分支 git checkout 分支名
刪除分支 git branch -d 分支名 (不能刪除當前分支)


其他不能刪除的情況: 包含 “未合併”的內容,刪除分支之前 建議先合併

強行刪除git branch -D 分支名
細節:
1.如果在分支A中進行了寫操作,但此操作侷限在工作區中進行(沒add/commit)。在master中能夠看到該操作。 如果分支A中進行了寫操作 進行了commit(物件區),則master中無法觀察到此檔案
2.如果在分支A中進行了寫操作,但此操作侷限在工作區中進行(沒add/commit)。刪除分支A 是可以成功的。


建立新分支 並切換 :git checkout -b 分支名
git checkout -b new_branch

假如在A分支刪除了a檔案,沒有add/commit

然後切換到B分支,這時在B分支中,a檔案也是被刪除的。你甚至可以在B分支中commit刪除操作。在B分支中,a檔案就是也就消失了。

但在A分支中,a檔案還是完好的(狀態不是deleted),如果想在A分支中刪除它,則要在A分支中git rm並commit。

假如在A分支中修改了a檔案,沒有add 且 commit,然後切換到B分支,這時在B分支中也能看到這個修改的內容,但在B分支中無法提交該修改。只能在A分支中提交這次修改。

在A分支中add然後commit,這時B分支就不能看到修改的內容了。

合併分支

git merge new_branch (把new_branch分支合併到當前分支)

檢視所有分支:git branch -v

分支本質:一個commit鏈,一條工作記錄線

分支名 :  分支名指向當前的提交(commit)
HEAD:head是一個指標,指向當前分支(HEAD->分支名)


如果一個分支靠前(dev),另一個落後(master)。則如果不衝突, master可以通過 merge 直接追趕上dev,稱為 fast forward。
fast forward本質就是 分支指標的移動.注意:跳過的中間commit,仍然會儲存。
fast forward:

1. 兩個分支 fast forward 歸於一點commit
2.沒有分支資訊(丟失分支資訊)

git在merge 時,預設使用fast fast forward ;也可以禁止 : git merge --no-ff
1. 兩個分支 fast forward ,不會歸於一點commit (主動合併的分支 會前進一步)
2.分支資訊完整(不丟失分支資訊)

衝突

合併:如果衝突 ,需要解決衝突。在不同的分支鏈中,合併有可能有衝突,因為同一個檔案有可能內容不一樣。而由於在不同的分支鏈中,故也沒有落後/靠前的說法,故衝突會發生
,若在同一個分支鏈,那肯定是不會有衝突的,落後方直接合併到靠前方即可,檔案內容最終跟靠前方一樣。
解決衝突:

1.vi 修改檔案內容,自己決定合併後的檔案內容應該是怎樣的

2.git add a.txt (假設衝突的檔案是a.txt,這次操作是告訴git,a.txt檔案的衝突解決了)

3. git commit -m "解決衝突"


git add xxxx(告知git,衝突已解決)
注意:master在merge時 如果遇到衝突 並解決,則解決衝突 會進行2次提交: 1次是最終提交,1次是將對方dev的提交資訊commit也拿來了(意思是master分支中會有dev分支的節點)

如果一方 落後,另一方 靠前。則落後方可以直接通過merge合併到 靠前方。