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合併到 靠前方。