Git 对旧提交进行更改

Git 对旧提交进行更改,git,svn,Git,Svn,假设我有4个分支:part1、part2、part3和master。第1部分有1次提交(第一次提交),第2部分有2次提交(第一次提交,第二次提交),第3部分有3次提交(第一次、第二次和第三次)。我想对第1部分中的第一次提交进行一些更改,并在其他分支的其他提交中反映这些更改。最快的方法是什么?不幸的是,我想不出任何银弹可以让您更改part1分支中的第一次提交,并让它自动更新其他3个分支中的第一次提交。主要原因是,第一次提交实际上在所有4个分支中都不同。通过检查这些分支中第一次提交的SHA-1散列,

假设我有4个分支:part1、part2、part3和master。第1部分有1次提交(第一次提交),第2部分有2次提交(第一次提交,第二次提交),第3部分有3次提交(第一次、第二次和第三次)。我想对第1部分中的第一次提交进行一些更改,并在其他分支的其他提交中反映这些更改。最快的方法是什么?

不幸的是,我想不出任何银弹可以让您更改
part1
分支中的第一次提交,并让它自动更新其他3个分支中的第一次提交。主要原因是,第一次提交实际上在所有4个分支中都不同。通过检查这些分支中第一次提交的SHA-1散列,您可以确信这一点

这就是说,如果您想重写第一次提交的历史记录,那么您可以进行交互式重新基址。下面是如何为
part3
分支执行此操作的示例:

git rebase -i HEAD~3
这将提示您出现如下屏幕:

pick dkj398u third commit message
pick l2mnx73 second commit message
edit 36e74bn first commit message
请注意,我已将第一次提交时的操作更改为
edit
。当您保存此文件并离开编辑器时,Git将运行rebase,但会在第一次提交时停止。这将给你一个机会做出你想要的改变。在此之后,您可以通过以下方式提交这些更改并继续重设基础:

git rebase --continue

可以对其余分支重复此过程。为了将来的参考,请注意,如果第一次提交是所有分支的最新提交,那么您可以在所有分支上使用
git commit--amend
,通过使用rebase来修改提交。

您可以使用git rebase,例如,如果您想修改回提交baa643cd,跑

$ git rebase --interactive baa643cd
在默认编辑器中,将要修改其提交的行中的“pick”修改为“edit”。进行更改,然后使用与以前相同的消息提交更改:

$ git commit --all --amend --no-edit
修改提交,然后

$ git rebase --continue

返回上一个head commit。

请查看给出的答案。