Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Git中间添加对提交的更改 如何将新的更改添加到中间的提交中,我的意思是不添加到顶部提交。 git log commit1 <--- HEAD commit2 commit3 git日志 commit1_Git - Fatal编程技术网

在Git中间添加对提交的更改 如何将新的更改添加到中间的提交中,我的意思是不添加到顶部提交。 git log commit1 <--- HEAD commit2 commit3 git日志 commit1

在Git中间添加对提交的更改 如何将新的更改添加到中间的提交中,我的意思是不添加到顶部提交。 git log commit1 <--- HEAD commit2 commit3 git日志 commit1,git,Git,创建一个新分支,它是commit3的副本。添加更改并提交。然后,将commit2和commit1合并到该分支。您必须执行交互式重新基址。有关详细信息,请阅读git rebase的帮助页面。简单的回答是,您将继续并像往常一样提交“中间”更改,然后运行git-rebase-i HEAD~4。它将在文本编辑器中显示最后3次提交的列表。只需重新排序提交最新提交的中间,然后保存并退出编辑器。然后Git将尝试以新的顺序重建历史记录。它可能会停止冲突。如果是这样,请像处理合并冲突一样修复它们,然后在它们全部修

创建一个新分支,它是commit3的副本。添加更改并提交。然后,将commit2和commit1合并到该分支。

您必须执行交互式重新基址。有关详细信息,请阅读git rebase的帮助页面。简单的回答是,您将继续并像往常一样提交“中间”更改,然后运行
git-rebase-i HEAD~4
。它将在文本编辑器中显示最后3次提交的列表。只需重新排序提交最新提交的中间,然后保存并退出编辑器。然后Git将尝试以新的顺序重建历史记录。它可能会停止冲突。如果是这样,请像处理合并冲突一样修复它们,然后在它们全部修复并添加后运行
git-rebase--continue
。当您遇到冲突时,它会告诉您所有这些,所以只要阅读错误消息,您就会没事了

编辑:实际上,看起来您想要编辑现有的提交。在这种情况下,当编辑器出现时,将新的临时提交移动到commit3旁边,然后将命令从“pick”更改为“squash”:

EDIT2:如果分支和commit1、commit2和commit3已经是公共的,那么您不应该重新设置基址。再说一次,无论如何都不应该修改提交,所以整个问题都没有意义。我假设这是一个私有分支,或者其他人希望它被重定基础并重新绑定。

您可以使用以下方法来完成此操作:

在弹出的文件中,将
pick commit3
更改为
edit commit3
。保存并退出,然后进行更改。像平常一样提交它们,然后使用
git-rebase——继续
。完成后,您将看到commit3和commit2之间的新更改


(这与Sjoerd的答案相同;这只是一种不同的思考方式。如果您的更改与commit2冲突,您必须以任何一种方式处理。)

您可以使用
git reset--soft HEAD[commit3 hash]
。此命令从历史记录中删除commit1和commit2,但其更改仍在历史记录中。

您不应该执行git commit--amend
;添加更改后,
git-rebase--continue
就足够了(除非您也要编辑消息)。如果更改已经存在于工作树中,则此方法不起作用。当然,他可以隐藏更改,在编辑commit3时进行重基,然后取消刷新,而不是像我的回答中那样进行挤压。另请参见
pick 123456 commit3
squash 541343 tmpcommit
pick 654321 commit2
pick 431523 commit1
git rebase -i commit3^