Github Flow删除历史记录中的提交和更改

时间:2017-05-18 14:54:16

标签: git github

我希望使用GitHub流程,我有一个问题。

我的回购(A,B,C,D是来自合并拉取请求的合并提交)

(主)------------- A ------ B ------- C ------- D(HEAD)

说我在B中提交的内容有缺陷,但我需要进行包含C和D的部署。如何在部署之后删除/隐藏B并将其重新放入?

2 个答案:

答案 0 :(得分:2)

使用git revert B -m 1创建一个新提交,撤消通过合并PR分支引入的更改。然后,您可以再次执行相同操作,但在命令中使用还原提交还原还原。在那里,您不需要-m 1参数,因为它不是您恢复的合并提交。

答案 1 :(得分:1)

有几种选择。我建议恢复是最好的选择。人们往往不喜欢由此产生的历史,但是IMO他们将审美意识置于实际问题之前。你有

A -- B -- C -- D <--(master)

如果你这样做

git revert B

你会得到

A -- B -- C -- D -- ~B <--(master)

生成与

相同的树
A -- C -- D <--(master)

您应该测试它,因为它是树的新状态。

然后要修复B,您需要重新创建其更改

git revert ~B

A -- B -- C -- D -- ~B -- ~~B <--(master)

(其中~~BB进行相同的更改),然后进行修复。我会使用--amend应用更改,以便您完成

A -- B -- C -- D -- ~B -- B+ <--(master)

(其中B+应用来自B)的更正后的更改。

现在有些人不喜欢看到B更改完成,然后撤消,然后重做。我认为这有点狂妄(而不是有用的),但是嘿,如果你真的想要的话,就像我说的那样有选择。

您可以选择改装。由于这显然是已被推动的变化,因此您需要协调所有开发人员,因为他们必须执行&#34中概述的步骤;从上游rebase恢复&#34;在git rebase文档(https://git-scm.com/docs/git-rebase

git rebase --interactive A master

编辑TODO列表。有几种方法可以做到这一点,但让我们说我们只是将B移到最后,准备接收修复程序。因此,只需将B的行移到列表的末尾即可。现在你有了

A -- C' -- D' -- B' <--(master)

(其中x'x的重写,它做同样的事情但是在不同的基础上#34; - 即不同的父母)。

当然你真的想要master^(现在省略B')。更好地测试它(它是一个新的代码状态)。然后你必须强制推动

git push -f master^:master

还有其他方法,但这些方法涵盖了主要选项。