tce*_*act 8 git rebase git-interactive-rebase
我正在尝试rebase -i在我的历史中发生的一些提交.说我有这样的日志:
* 5e32fb0 (HEAD -> master) Add latest feature
* 106c31a Add new feature
* 2bdac33 Add great feature
...100 other commits...
* 64bd9e7 Add test 3
* 3e1066e Add test 2
* 26c612d Add test 1
* 694bdda Initialize repo
Run Code Online (Sandbox Code Playgroud)
我想压缩3次测试提交.在这些情况下,git rebase -i HEAD~106不是很实用.我正在寻找的是类似的东西git rebase -i 64bd9e7:26c612d.
git是否有这种行为,如果是这样,我该如何使用它?
我看过这篇文章,但它没有回答我的问题.
小智 12
你说“git rebase -i HEAD~106不太实用”。
如果您的意思是生成的脚本文件长度 >100 行,那么它不是很好,但它可以工作。
如果你的意思是倒数起来很乏味,需要 106 次提交——就像我有时会遇到的那样,那么有一个解决方案。
您需要所需的最早提交的父级的哈希值,然后您可以执行以下操作:
git rebase -i <parent-hash> my-branch
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做
git rebase -i <parent-hash> HEAD
Run Code Online (Sandbox Code Playgroud)
之后你就会保持一种超然的态度,可以做你想做的事。
所以在你的例子中,你可以这样做
git rebase -i 694bdda HEAD
Run Code Online (Sandbox Code Playgroud)
(但我仍然同意其他评论,关于你是否真的想改变那么早的事情。当我发现自己这样做时,我认为这有点代码味道。对我来说,有这么长的时间是不寻常的分支而不推送/共享它。我也会创建一个备份分支来测试它。)
只需使用rebase -i和压缩这些提交即可。
git rebase -i <main_branch>
# Now just add `s` in front of all the commits you want to squash
Run Code Online (Sandbox Code Playgroud)
如果您有很多提交,建议您看一下rebase --onto-
git rebase --onto <final_base_commit> <initial_base_commit> <head>
git rebase --onto 694bdda 64bd9e7 5e32fb0
Run Code Online (Sandbox Code Playgroud)
注意:重写历史记录是一项高级操作,因此请谨慎行事。
为了压缩这三个提交,您需要重写整个存储库的历史记录。也就是说,在这些测试提交之后提交的所有提交哈希都将被修改。在我看来,最直接的方法是:
64bd9e7。64bd9e7。