2014-02-26 86 views
4

我有兩個git分支branch_a和branch_b,它們都與分支主分離。使一個分支等於另一個分支

我推送了branch_a。但是,我想重置branch_a上的所有更改,並將它們交換爲branch_b上的更改。

我可以恢復到branch_a在分支點與逆轉提交,然後合併branch_b,或重訂branch_b branch_a。有一種更簡單的方法嗎?有什麼方法可以說:「創建一個提交,使branch_a中的文件變得完全等於branch_b」?我不想解決衝突。 branch_a錯誤,branch_b正確。但我不能重置爲branch_b,因爲我已經推送了branch_a。

回答

3

回覆:「有沒有更簡單的方法」

這不會重置爲這樣。但你應該能夠使用「我們」合併策略覆蓋branch_a與branch_b這樣的:

git checkout branch_b 
git merge -s ours branch_a 
git checkout branch_a 
git merge branch_b 

結果應該是你branch_a現在基本上是branch_b。

我是一個git的新手,所以買者自負

0

的Git俱樂部的第一條規則是你從來沒有改變歷史,一旦它被推開(見http://git-scm.com/book/ch3-6.html#The-Perils-of-Rebasing)。如果你刪除了公開的提交,你可以搞砸其他開發者狀態,這樣他們的變更集就掛起了孤立提交,這是一個很難處理的問題。

不幸的是,只需將逆轉提交,然後如果有任何常見的變更合併的branch_b的問題。回覆可能撤消更改然後可能不會重新應用,具體取決於您何時進行分支。如果你真的想讓branch_a成爲branch_b(並且你沒有其他人使用倉庫),你可以刪除branch_a與git branch -D branch_a,然後做git branch -m branch_b branch_a。你最後剩下的任務就是清理遙控器,你可以做的是:

git push remote :branch_a # removes branch_a 
git push remote branch_a 

上述方法的優點是你不合並,並保證不會有衝突。只要確定沒有其他人根據舊的branch_a進行更改。

5

如果你不想從branch_a任何改變,那麼我不認爲有任何其他方式比在恢復了branch_a的發散點一切,然後合併成branch_b branch_a。這裏有一個簡單的方法來做到這一點,從這個answer採取:

git checkout branch_b 

git reset <the common ancestor commit> 

# Move the branch pointer back to the previous HEAD. 
git reset --soft [email protected]{1} 

git commit -m "Revert to <the common ancestor commit>" 

# Update working copy to reflect the new commit. 
git reset --hard 

它仍然可以重置branch_a是一樣的,即使它已經被推branch_b,但也有注意事項。基本上,如果這個分支只被你使用,那麼做這件事很安全,但如果其他人也在這個分支上工作,你需要與他們協調,這些步驟取決於你的具體情況,所以我不能真正的在這裏給出一個一般答案。

如果你想要去的路線,這裏是如何做到這一點:

git checkout branch_a 
git reset --hard branch_b 
git push -f origin branch_a 
相關問題