如何从一个已合并到另一个git分支的git分支中删除提交

时间:2015-07-02 14:47:57

标签: git git-merge

我对git branch管理有点困惑,可以使用一些帮助。我知道SO上有几个相关的问题,但我不确定这种情况是否完全相同,我不想搞砸。

我们有一个名为'master'的分支,用于表示当前正在制作的内容。我们有另一个名为“development”的分支,代表我们的测试服务器上的内容,并包含任何可用于测试的当前开发/错误修复。在处理用户故事或错误修复时,我们的开发人员应该为每个故事/修复创建一个分支。当它准备好进行测试时,它将合并到开发分支中并更新测试服务器。当故事/修复移动到生产时,它将合并到主分支。

我们的一位开发人员最近将8个更改直接推送到主分支。此后,这些更改已从master合并到开发分支。

我需要知道的是:

  1. 如何从主分支中删除这些提交,因此master仍然是实际生产中的内容的图像。我已经看到一些SO帖子提倡变基或挑选,但我不确定他们是否适用,并希望了解我的情况的具体建议。
  2. 在合并到开发分支的情况下执行此操作是否安全,即将它们从主服务器中删除,但是这样做,也将它们从开发分支中删除?我很困惑,因为我看到合并后他们保留了相同的id和父母,所以我不确定从master中删除它们会产生什么影响,如果有的话。
  3. 编辑:我还应该提一下,我已经看到了this post这可能是我需要的,但是再次希望得到确认,我仍然不确定这将如何影响合并到开发部门。

    仅供参考,我正在使用tortoisegit(但不必)。

    感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

最好的办法是使用git revert c1..c2恢复8次提交的范围,其中c1c2分别代表您要还原的第一次和最后一次提交。这将撤消这些提交的效果,而无需删除提交本身。这样,您合并到开发分支仍然有效。

请注意,使用此方法,您的master历史记录中将有8个更多次提交,每次恢复一次。如果您想要只有一个提交同时撤消所有8个提交,并且自8以来没有“合法”提交,那么请执行以下操作:

git checkout -b temp-branch <SHA of last good commit>
git reset --soft master
git commit -m "Undoing 8 commits"
git checkout master
git merge temp-branch
git branch -d temp-branch

编辑:将'goof'改为'good'!