2014-10-06 109 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.