当前位置: 技术问答>linux和unix
关于git修改历史log的问题
来源: 互联网 发布时间:2017-02-26
本文导语: 现在有一个git版本库,在一次commit -m操作中描述写错了,后来又基于这个错误的描述commit了很多版本,现在想要修改那条错误的描述而不打乱后面的顺序,该怎么做?请各位指教~谢谢 | ...
现在有一个git版本库,在一次commit -m操作中描述写错了,后来又基于这个错误的描述commit了很多版本,现在想要修改那条错误的描述而不打乱后面的顺序,该怎么做?请各位指教~谢谢
|
引自Pro Git中文版6.4 重写历史,略作修改
Git没有一个修改历史的工具,但是你可以使用rebase工具来衍合一系列的提交到它们原来所在的HEAD上而不是移到新的上。依靠这个交互式的rebase工具,你就可以停留在每一次提交后,如果你想修改或改变说明、增加文件或任何其他事情。你可以通过给git rebase增加-i选项来以交互方式地运行rebase。你必须通过告诉命令衍合到哪次提交,来指明你需要重写的提交的回溯深度。
例如,你想修改最近三次的提交说明,或者其中任意一次,你必须给git rebase -i提供一个参数,指明你想要修改的提交的父提交,例如HEAD~2或者HEAD~3。可能记住~3更加容易,因为你想修改最近三次提交;但是请记住你事实上所指的是四次提交之前,即你想修改的提交的父提交。
I. $ git rebase -i HEAD~3
HEAD~3..HEAD范围内的每一次提交都会被重写,无论你是否修改说明。
attention:不要涵盖你已经推送到中心服务器的提交——会使其他开发者产生混乱,因为你提供了同样变更的不同版本。
II. 在输入上边命令后的结果中,将你想修改的每一次提交前面的pick改为edit,保存退出
III.根据提示,运行
$ git commit --amend
修改提交说明,退出编辑器。然后,运行
$ git rebase --continue
这个命令会自动应用其他两次提交,你就完成任务了。如果你将更多行的pick 改为
edit ,你就能对你想修改的提交重复这些步骤。Git每次都会停下,让你修正提交,完成后
继续运行。
你目前的情况只需修改一次即可。
Git没有一个修改历史的工具,但是你可以使用rebase工具来衍合一系列的提交到它们原来所在的HEAD上而不是移到新的上。依靠这个交互式的rebase工具,你就可以停留在每一次提交后,如果你想修改或改变说明、增加文件或任何其他事情。你可以通过给git rebase增加-i选项来以交互方式地运行rebase。你必须通过告诉命令衍合到哪次提交,来指明你需要重写的提交的回溯深度。
例如,你想修改最近三次的提交说明,或者其中任意一次,你必须给git rebase -i提供一个参数,指明你想要修改的提交的父提交,例如HEAD~2或者HEAD~3。可能记住~3更加容易,因为你想修改最近三次提交;但是请记住你事实上所指的是四次提交之前,即你想修改的提交的父提交。
I. $ git rebase -i HEAD~3
HEAD~3..HEAD范围内的每一次提交都会被重写,无论你是否修改说明。
attention:不要涵盖你已经推送到中心服务器的提交——会使其他开发者产生混乱,因为你提供了同样变更的不同版本。
II. 在输入上边命令后的结果中,将你想修改的每一次提交前面的pick改为edit,保存退出
III.根据提示,运行
$ git commit --amend
修改提交说明,退出编辑器。然后,运行
$ git rebase --continue
这个命令会自动应用其他两次提交,你就完成任务了。如果你将更多行的pick 改为
edit ,你就能对你想修改的提交重复这些步骤。Git每次都会停下,让你修正提交,完成后
继续运行。
你目前的情况只需修改一次即可。