如何使用git commit -m --amend将最新更改添加到不是最新的提交?

7rtdyuoh  于 11个月前  发布在  Git
关注(0)|答案(1)|浏览(102)

我在git中提交了两次,分别是“version 1”和“version 2”。之后我又修改了代码,使用了git commit -m“version 1”--amend。我以为它会把新的修改添加到version 1中,但是它把version 2提交消息的名称从“version 2”改为“version 1”,并添加了新的修改。所以,现在我有两个版本1的提交。但是我想把新的修改添加到原来的版本1。我怎么做,我怎么撤消这个--修改?请解释。

before changes

git log

commit hash
   version 2
commit hash
   version 1

after changes

git commit -m "version 1" --amend

git log

commit hash
   version 1 (This is where the new changes happened)
commit hash
   version 1 (I want it to go here)

字符串

thtygnil

thtygnil1#

要将新的更改放入底部提交,您必须进行一次新的提交,比如说“Version 1 Amend”,然后进行一次交互式的变基:

git rebase -i HEAD~3   # interactively rebase three commits

字符串
在编辑器中,按照你想要的顺序重新排列提交。假设我们有:

pick 19df34d Version 1
pick 437ca9e Version 2
pick 6503d73 Version 1 Amend


像这样重新排序:

pick 19df34d Version 1
pick 6503d73 Version 1 Amend
pick 437ca9e Version 2


然后将第二个pick改为squashfixup。(阅读差异,或实验)。

pick 19df34d Version 1
squash 6503d73 Version 1 Amend
pick 437ca9e Version 2


然后保存并退出。如果没有冲突,它就会完成;否则你将不得不学习如何在樱桃采摘中解决冲突。
通过使用git commit --fixup <hash>git commit --squash <hash>,然后使用git rebase -i --autosquash,可以稍微自动化上述工作流。
您可以配置git,使git rebase -i隐含--autosquash;这样做很有用。
当提交第三次提交时,我们会这样做:

git commit --fixup HEAD^


所有这一切都是生成一个提交消息,看起来像这样:

pick 19df34d Version 1
fixup 6503d73 fixup! Version 1
pick 437ca9e Version 2


automsquash逻辑为您进行编辑,将fixup/squash提交重新排列在它们的目标之后,并设置命令。
交互式的rebase、automsquash和rebase/cherry-picking中的冲突解决是需要学习和实践的基本Git技能。

相关问题