解 rebase 衝突

Step1:建立衝突情境

git clone https://github.com/alincode/git-rebase-conflict-sandbox.git
cd git-rebase-conflict-sandbox
git remote rm origin

Step2:發生衝突

# 切換到 hotfix/issue-1 分支
git checkout hotfix/issue-1

# 將 hotfix/issue-1 內新增的第一筆 commit,接在 master 分支的最後一筆 commit。
git rebase master

Step3:查看衝突

# 查看衝突
git status
git diff

# 編修衝突
vi m1.md

Step4:解衝突

# 再一次確認編修結果
git diff

# 將修改的內容,放入 index 中
git add .

# 告訴 rebase 我解完了
git rebase --continue

Step7

不一定解一次,就解掉了,如果 hotfix/issue-1 分支,跟 master 分支的送交紀錄差距很遠,可能會連續碰到好幾次衝突,你得一直會到 Step5 的階段,在解一次新的衝突,直到用 git status 指令觀察,確定 rebase in progress; onto不見了。

若如果你在過程中會連續遇到五次衝突,但你在解第四次衝突的時候,忽然想起剛剛解第二次衝突的時候,內容有改錯,這時候你就得用 git rebase --abort 指令,把之前所有修改衝突的狀態都 reject 掉,重新再做一次 git rebase master

如果你沒有照這個正常步驟走完,例如不管 git 的提示,遇到衝突一直按 git rebase --skip 忽略它。最後會導致 git 回報你 rebase 成功,但實際結果卻是遺失了一堆的 commit 記錄。

例如你明明沒解完,卻用 git add . && git rebase --continue 告訴 git 你解完了,git 並沒有機制防止你犯這樣的錯,最後將會導致,一堆衝突沒解完,當成一般正常內容 commit 進了儲存庫中了。

results matching ""

    No results matching ""