2014-10-06 113 views
2

假設「主」分支必須始終保持穩定如果意外地將某個功能合併到「主」中,那麼修復「主」的最佳做法是什麼?這會破壞它並且主控已被推送到遠程?在Git中修復損壞的分支的最佳做法?

我已經重新設置爲以前的穩定提交,然後在該提交的「主」上執行push --force,但我認爲它有點令人討厭,因爲它涉及重寫歷史。

在這裏我們發現做一個或多個還原一個建議的提交: How to do emergency fixes on master in git?

這也有點乏味,如果你因爲某些原因已經合併含5+提交一個特徵(據我所知,你只能恢復一次一個提交)。

對於修復我沒有想到的破損分支的任何建議?

+1

你是唯一一個在該存儲庫上工作的人嗎?你是否已經將破碎的'master'分支公開(換句話說,你是否已經將它推送到某個具有共享訪問權限的遠程)?另外,添加一個代表你近期歷史的ASCII圖可以幫助你得到明確的答案;在Git中,最好的行動往往取決於你面對的特定情況。 – Jubobs 2014-10-06 15:36:31

回答

1

如果突破是一個壞合併的結果,那麼你只需回覆的合併提交本身

git revert -m 1 $merge_sha 

這是假設^ 1是主。

這將恢復由合併提交引入的所有更改,無論它是來自1次提交還是500次提交。

未來,爲了在'恢復'下',你需要恢復恢復的沙。

又見Revert Faulty Merge HowTo

+0

-m ==主線==你想保留的歷史。對於'git checkout master'的典型情況,然後'git merge merge feature'在哪裏創建一個新的合併提交,然後-m 1應該是正確的,我想。還有其他情況下,它不會。 – 2014-10-06 16:07:17

1

如果你做了合併你的歷史看起來像一個git revert

 o--o--o 
    /  \ 
o--o------o--o----------------o 

      ^   ^
      |    | 
      merge   merge reverted 

如果你做一個被迫推它看起來像這樣

 o--o--o 
    /  
o--o------o 

如果沒有其他開發者已經開始合併,而不是強制推進,因爲歷史將會更加清晰。

E.g.分支真的合併了嗎?

 o--o--o 
    /  \ 
o--o------o--o--------------------o 

      ^    ^
      |     | 
Seems to be merged here, but reverted here.