[英]Syncing 2 branches after git merge
如何保持 2 個 Git 分支同步?
我目前有一個master
分支和一個gh-pages
分支以及各自的遙控器。 每當我按如下方式提交時, master
和gh-pages
分支都共享相同的提交 ID:
git checkout master
git commit -am "message"
git checkout gh-pages
git merge master
我的日志看起來像這樣(使用git log --graph --oneline --all --decorate
):
在我解決了合並沖突之后,每個合並都會收到自己的提交:
我的問題是,如何對齊 2 個分支,以便像以前一樣在單個“圖形軌道”上進行合並?
我試圖根據這個答案pull
,但無濟於事。
它看起來像犯50b6dec
加入到gh-pages
分支,並承諾e43c01f
被上進行master
在同一時間,這是什么原因造成合並沖突。
因此, gh-pages
有 1 個master
沒有的提交。 因此,此后任何時候合並時,Git 都無法進行快進合並。 (快進合並為您提供了以前的線性歷史。)因此,解決方案是:
git checkout master
git merge gh-pages
為了防止將來再次發生這種情況,請將您的流程更改為:
git checkout master
git commit -am "message"
git checkout gh-pages
git merge --ff-only master
如果gh-pages
有master
沒有的任何提交,則--ff-only
標志將中止合並並出現錯誤。
如果你想改寫歷史,讓它仿佛從未發生過,你也可以這樣做。
首先,確保您在master
:
git checkout master
現在變基:
git rebase 50b6dec
您將不得不再次解決該沖突。 完成后,執行:
git rebase --continue
當 rebase 完成后,你必須強制更新origin
:
git push --force-with-lease origin master
您還必須移動gh-pages
分支。 做:
git branch -f gh-pages master
git push --force-with-lease origin gh-pages
這會給你一個看起來像這樣的歷史:
* f218f70' (HEAD -> master) Added Scatterplot functionality to check ratings
* cb79b79' Squashed bug
* fcf0d8a' Small change
* e43c01f' Small change
* 50b6dec Small change
* a217267 Small change
強制性警告:由於 rebase 會重寫歷史記錄,因此對於在此分支上工作的任何其他人來說,這可能是危險的/具有破壞性的。 確保您與正在合作的任何人清楚地傳達您所做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.