我希望使用GitHub流程,我有一个问题。
我的回购(A,B,C,D是来自合并拉取请求的合并提交)
(主)------------- A ------ B ------- C ------- D(HEAD)
说我在B中提交的内容有缺陷,但我需要进行包含C和D的部署。如何在部署之后删除/隐藏B并将其重新放入?
答案 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)
(其中~~B
与B
进行相同的更改),然后进行修复。我会使用--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
还有其他方法,但这些方法涵盖了主要选项。