我有7个影响相同文件的分支,所有分支都通过辅助分支合并到主分支中。其中一个分支并不意味着要合并,因为它不稳定 - 我可以撤消该单个分支所做的更改吗?
假设我的存储库如下所示:
master A - B - - - - E - - G - - - J - K
b1 | `- F - - - I´
b2 | /
b3 |` - C - - - - - H -´
b4 ` - - D - - - -´
现在D在主人中。我想删除它(但保留在b4分支中)。
答案 0 :(得分:3)
你应该能够恢复H。
git revert H
但是,您将无法修复它并在以后修复时重新合并。 D只会通过恢复第一个恢复来重做。
根据您的工作流程,可能更容易再次进行合并而不包括b4。
我在这里的帖子(或谷歌“每个功能分支”)中解决了这类问题:http://dymitruk.com/blog/2012/02/05/branch-per-feature/
摆脱坏分支是这个工作流程的核心。我希望它可以帮助你。
答案 1 :(得分: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上做这个恢复 - 以及随后的恢复 - 恢复 - 。
答案 2 :(得分:0)
如果一切都在你的本地仓库中(没有被推到任何地方),我只需要在合并之前将分支重置为状态并再次进行合并。
如果它被推(即你不想重置):在b3上恢复你的合并提交(H)(这将创建一个新的提交 - 比方说,Q)并将b3合并到master中再次(所以你合并这个提交由b4带来的还原变化的提交)。如果你想稍后将b4合并到master中,你需要:将b3合并到b4(这会将Q引入b4),在b4上恢复Q(所以你还原恢复) - 现在b4可以再次处理并合并到稍后掌握
如果它只是一个D提交,您不想拥有,请执行以下操作:
稍后,您可以在b4上恢复U commit(即返回D中的更改)并再次将b4合并到master中。
答案 3 :(得分:0)
假设没有推动:
git checkout master -b old-ref
万一我们需要它......然后:
git checkout <old correct sha1> -b TEMP git branch -D master git checkout master
应该获得origin / master
git rebase -i TEMP
现在你可以正确地(或不是)完成未完成的合并。如果进行了推送,并且您无法控制它(意味着重建它&#34;从头开始&#34;),您将不得不恢复错误提交。