我想“跟进”关于此事的另一个问题:签出旧提交并将其设为新提交 https://stackoverflow.com/questions/3380805/checkout-old-commit-and-make-it-a-new-commit
但他们说“不要这样做!”所以看来我必须问一个新问题。 (尽管这是同一个问题,但我认为最适合我的答案却没有按预期工作......
如果我有承诺A-B-C-D-E-F
(想象一下这些都是 SHA)。
我想让整个存储库完全一样C
然后提交以创建'G'
这完全就像C
。这样,当我完成时,日志是 A-B-C-D-E-F-G,即使 C 和 G 是相同的。
一个答案表明择优挑选,这看起来很完美,但它让我解决了之间的所有冲突C
and F
。我查看了文档并尝试了--force
无论如何,然后推荐--patch
. --patch
是最接近的,但不是绝对的。那么有没有一种方法可以让cherry-pick只选择C
版本冲突?
另一个最接近的答案是结账C
,但我找不到将其保留在同一分支上的神奇词。我最近完成的培训说使用最后的“magic dash dash”来告诉git
您希望在当前分支上执行此操作,但无论我做什么,它都会创建一个“(无分支)”分支。
我相信你可以看出,我对 git (以及一般的命令行)还很陌生,但我试图自己解决这个问题。如果您可以使用您推荐的详细版本,那么它会更好地留在我的脑海中,我将不胜感激。 (-a
= --all
or -a = --annotate
or -a = --albuquerque?
)
这看起来很简单,而且正是您可能想要使用 git 做的事情——返回之前的提交,而不会丢失中间提交,以防万一您改变主意。
你介意生成:A-B-C-D-E-F-F'-E'-D'
代码的状态在哪里D'
和原来一样C
(so G
== D'
)?在这种情况下,只需恢复F
, E
, and D
。如果您不需要中间步骤,revert
但不要申请,然后提交。那是:
$ git revert -n HEAD
$ git revert -n HEAD~
$ git revert -n HEAD~2
$ git commit -m 'Revert D,E,and F'
此后,当前 HEAD 为 G,两次提交 G 和 C 应该包含相同的代码树。您可以通过检查输出来验证git cat-file -p HEAD | grep ^tree
and git cat-file -p C | grep ^tree
。这两个命令应该给出相同的输出。
但目前还不清楚为什么要保留中间提交。如果您想让它们留给后代,请执行以下操作:git branch old-stuff
, git reset C
这会将您当前的分支设置回C
, but D
, E
, and F
仍然可以在名为的分支中查看old-stuff
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)