我在這裏遇到了一些問題:我在Git中有一個特定於問題的分支28s
,那是我在一般的develop
分支中合併的。原來我做得太快了,所以我用git-revert來取消合併。然而,現在是合併28s
到develop
的時候了,但git-merge命令看到了原始合併,並且愉快地宣佈一切正常,並且分支已經合併了。現在我該怎麼做?創建一個「還原」還原「28s - >開發」「'提交?似乎不是一個好辦法,但目前我無法想象任何其他方法。在Git中重新執行還原合併
樹結構的樣子:
我在這裏遇到了一些問題:我在Git中有一個特定於問題的分支28s
,那是我在一般的develop
分支中合併的。原來我做得太快了,所以我用git-revert來取消合併。然而,現在是合併28s
到develop
的時候了,但git-merge命令看到了原始合併,並且愉快地宣佈一切正常,並且分支已經合併了。現在我該怎麼做?創建一個「還原」還原「28s - >開發」「'提交?似乎不是一個好辦法,但目前我無法想象任何其他方法。在Git中重新執行還原合併
樹結構的樣子:
你必須 「恢復的復歸」。取決於你是如何回覆的,可能並不像聽起來那麼容易。看看official document on this topic。
---o---o---o---M---x---x---W---x---Y
/
---A---B-------------------C---D
允許:
---o---o---o---M---x---x-------x-------*
/ /
---A---B-------------------C---D
但所有這一切工作的?當然可以。你可以恢復合併,從純粹的技術角度來看,git很自然地做到了,並且沒有真正的問題。
它只是把它從「合併前的狀態」改爲 「合併後的狀態」,就是這樣。
沒什麼複雜的,沒什麼奇怪的, 沒什麼真正危險的。 Git會做甚至沒有考慮它。所以從技術角度,有什麼不對從工作流程的角度恢復合併,但 它的東西,你通常應該儘量避免 。
如果有可能,例如,如果發現得到了合併 到主樹的問題,,而不是恢復合併,儘量真的很難:
- 平分問題然後修復它,
- 或嘗試恢復導致它的單個提交。
是的,它更復雜,不,它並不總是去上班(有時 的答案是:「哎呀,我真不應該把它合併,因爲它不是 準備好着呢,我真的需要撤消合併的所有「)。因此,那麼你真的應該恢復合併,但是當你想重新合併時,你現在需要通過恢復恢復來做到這一點。
良好的鏈接(+1)。我冒昧地在您的答案中複製部分文件,以便讀者立即看到本案中的相關選項。如果您不同意,請隨時恢復。 – VonC 2009-07-03 11:00:28
我們剛碰到一個案例,我們需要做到這一點,發現這裏的樂趣並不完全停止。這是一個長期合併的分支,因此我們需要繼續更新它。我的方法在這裏:http://tech.patientslikeme.com/2010/09/29/dealing-with-git-merge-revisions/ – jdwyah 2010-09-29 15:07:51
我跟着@ jdwyah的博客文章,這是光榮的(嚴重的是,這真是太棒了,它只是工作)。 – hellatan 2013-08-20 21:52:17
而不是使用git-revert
你可以在devel
分支扔都用這個命令離開(撤銷)錯誤的合併提交(而不僅僅是恢復它)的。
git checkout devel
git reset --hard COMMIT_BEFORE_WRONG_MERGE
這也將相應地調整工作目錄的內容。 注意:
git-reset
刪除。所有提交之後,您指定爲 的git reset
參數將會消失!我推薦在試用之前仔細研究git-reset
手冊頁。
現在,復位後,你可以在devel
重新申請更改,然後做
git checkout devel
git merge 28s
這將是從28s
真正合併到devel
像最初的一個(也就是現在的 從Git的刪除歷史)。
讓我們假設你有這樣的歷史
---o---o---o---M---W---x-------x-------*
/
---A---B
其中A,B未能提交和W - 正在恢復中號
的所以我纔開始修復發現的問題我不W的摘櫻桃承諾我的分支
git cherry-pick -x W
然後我恢復W¯¯提交我的分支
git revert W
之後我可以繼續修復。
最終的歷史可能看起來像:
---o---o---o---M---W---x-------x-------*
/ /
---A---B---W---W`----------C---D
當我發PR它會清楚地表明,PR是撤銷還原並增加了一些新的提交。
要恢復的復歸沒有搞砸了您的工作流程太多:
當您準備好時,您的功能分支應該能夠正常合併。這裏唯一的缺點是你會在歷史中有一些額外的合併/還原提交。
我剛剛在面對同樣的問題時發現了這篇文章。我發現上面的wayyy可怕的做重置困難等我最終會刪除我不想要的東西,並將無法取回它。
取而代之,我檢出了我希望分支返回的提交。 git checkout 123466t7632723
。然後轉換成分支git checkout my-new-branch
。然後我刪除了我不再需要的分支。當然,這隻有在你能夠拋棄你搞砸的分支時纔有用。
這是什麼GUI? – 2009-07-03 16:01:18
這是GitX(http://gitx.frim.nl)。 – 2009-07-06 06:56:16