我在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)
字符串
1条答案
按热度按时间thtygnil1#
要将新的更改放入底部提交,您必须进行一次新的提交,比如说“Version 1 Amend”,然后进行一次交互式的变基:
字符串
在编辑器中,按照你想要的顺序重新排列提交。假设我们有:
型
像这样重新排序:
型
然后将第二个
pick
改为squash
或fixup
。(阅读差异,或实验)。型
然后保存并退出。如果没有冲突,它就会完成;否则你将不得不学习如何在樱桃采摘中解决冲突。
通过使用
git commit --fixup <hash>
或git commit --squash <hash>
,然后使用git rebase -i --autosquash
,可以稍微自动化上述工作流。您可以配置
git
,使git rebase -i
隐含--autosquash
;这样做很有用。当提交第三次提交时,我们会这样做:
型
所有这一切都是生成一个提交消息,看起来像这样:
型
automsquash逻辑为您进行编辑,将fixup/squash提交重新排列在它们的目标之后,并设置命令。
交互式的rebase、automsquash和rebase/cherry-picking中的冲突解决是需要学习和实践的基本Git技能。