4

我有一個影響相同文件的7個分支,全部都通過二級分支合併到主分支中。其中一個分支並不意味着被合併,因爲它不穩定 - 我可以撤銷該分支所做的更改嗎?如何在Git中提取並移除合併的分支?

假設我的倉庫看起來如下:

master A - B - - - - E - - G - - - J - K 
b1   |   `- F - - - I´ 
b2   |     /
b3   |` - C - - - - - H -´ 
b4   ` - - D - - - -´ 

現在d是在主。我想刪除它(但保留在b4分支)。

回答

3

你應該能夠只是恢復H.

git revert H 

但是,您將無法修復它,並重新emerge後來固定時。 D只會通過恢復第一次恢復而重做。

根據您的工作流程,再次進行合併可能更容易,不包括b4。

我解決這種東西在我這裏後(或谷歌「每特性分支」):http://dymitruk.com/blog/2012/02/05/branch-per-feature/

擺脫糟糕的分支在這個工作流程的心臟。我希望它能幫助你。

1

閱讀this

從本質上講,要撤消的東西合併類似

git revert -m 1 H 

創建提交L,然後在以後的日子時提交生效再次

git checkout master && 
    git revert L && 
    git checkout b3 && 
    git merge b4 

和合並它了再次。

在我的例子中,我已經做master的復歸,但我會建議做初步git revert H在最低水平分支的變化沒有任何意義 - 如果它只是避免它成爲主人的一部分,然後再去做在那個級別,但是如果你不想讓它影響b3(或者任何其他分支),那麼在b3上做這個恢復 - 然後恢復 - 恢復 - 。

0

如果所有東西都在您的本地回購庫(未被推到任何地方),我只需將分支重置爲合併之前的狀態並再次進行合併。

如果它推(也就是你不想要重置):在B3恢復您的合併提交(H)(這將創建一個新的提交 - 說,Q),並再次合併B3到主(所以你合併此恢復更改的提交,由b4引發)。如果你想以後將b4合併到master中,你需要:將b3合併到b4中(這會將Q帶入b4),在b4上恢復Q(這樣你可以恢復恢復) - 現在b4可以再次工作併合併到主人在某一點後

如果它只是一個單一的d提交,你不希望有高手,你可以做到以下幾點:

  • 結賬B4
  • 復歸d(這將創建一個新的提交 - 例如,U)
  • 將b4合併到master(或櫻桃選擇只是U提交,它刪除不需要的cha nges)。

稍後,您可以在b4上還原U提交(即,帶回D中所做的更改),並再次將b4合併到主控中。

0

假設沒有推作了:

 git checkout master -b old-ref 

以防萬一,我們需要它...然後:

git checkout <old correct sha1> -b TEMP 
    git branch -D master 
    git checkout master 

應該獲得原產/主

git rebase -i TEMP 

現在你可以做未完成的合併正確(或不)。如果推進了,並且你無法控制它(意味着從頭開始重建它),你將不得不恢復錯誤的提交。