2017-02-16 97 views
2

抱歉混淆標題,但我不能提出一個更好的。git:合併來自一個分支的合併變更了以前的合併

這是我的問題。我有2個分支,developfeature。我跟着這個過程:在feature

  • 合併feature

    1. 寫代碼爲develop
    2. 發現錯誤,恢復合併
    3. 寫一些無關的代碼,並直接承諾develop

    現在我想合併我所做的直接更改爲develop的更改爲feature。問題是,當我這樣做時,它吹走了我以前在feature中所做的所有更改。我認爲會發生這種情況是因爲步驟3中的還原比feature中的任何代碼更新更新,所以它適用於恢復更改。

    是否有可能做我想做的事情?我唯一能想到的是恢復develop中的恢復,然後合併,然後恢復恢復的恢復。這似乎很麻煩。

  • +0

    見https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt – torek

    回答

    2

    我想你可以糾正問題,兩個步驟:

    1)你的develop一個互動的底墊,並刪除該還原承諾,即

    git rebase -i HEAD~6 # or however far back is the merge commit 
    

    刪除線包含復歸提交併完成基地。此時,develop現在具有原始合併提交,但不恢復。

    2)在develop上進行重定位,指定發起的散列,其中developfeature源自該提交。默認情況下,重訂會忽略合併完全提交,從而將其取出:

    git checkout feature 
    git rebase <SHA-1> 
    

    其中<SHA-1>這裏是從何處提交從featuredevelop關閉。

    經過這兩個步驟,您的develop分支將既沒有合併提交也沒有恢復提交,並且您應該安全地合併到feature

    強烈推薦閱讀在這個問題上通過@torek給出了答案:

    Accidentally merged in wrong branch to mine. Is there a way to remove these unwanted files?

    1

    通常你做出特色分支,你該分支工作,以完成功能。然後,將您的功能合併到開發分支,並在一段時間後開發狀態啓用。

    在你的情況下,如果你在develop分支上有變化,我更願意在你的功能分支上使用rebase。然後你得到所有的改變,你的功能分支被重寫爲你的開發分支的最後一次提交。

    Atlassian有一個很好的教程,您可以如何使用功能分支。

    https://www.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow

    +0

    我不認爲這解決了問題。爲什麼我們想要在_feature_上重建_develop_以將前者提交到後者? –

    +0

    沒有您的功能分支在與開發狀態相同的狀態下重新分配,然後您有全新的更改,並且在您的日誌中看起來您已從該新位置創建了新分支。 – Stony

    +0

    是的,但是這不會引起回覆,從而抹去他在'feature'分支中的其他工作?如果沒有這種情況發生,沒有辦法讓'develop'與'feature'進行交互,除非我們放棄了糟糕的合併。 –