Git: 交互地变基一系列提交
Git: Interactively rebase a range of commits
我正在尝试 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
我想压缩 3 个测试提交。在这些情况下,git rebase -i HEAD~106
不是很实用。我正在寻找的是 git rebase -i 64bd9e7:26c612d
.
git是否有这种行为,如果有,我该如何使用它?
我查看了 this post,但没有回答我的问题。
只需使用 rebase -i
并仅压缩那些提交。
git rebase -i <main_branch>
# Now just add `s` in front of all the commits you want to squash
如果你有很多提交,我建议你看一下 rebase --onto
-
git rebase --onto <final_base_commit> <initial_base_commit> <head>
git rebase --onto 694bdda 64bd9e7 5e32fb0
注意:改写历史属于高级操作,请谨慎操作。
为了压缩这三个提交,您需要重写 整个 存储库的历史记录。也就是说,将修改这些测试提交之后提交的所有提交哈希。在我看来,最直接的方法是:
- 创建指向
64bd9e7
的临时分支和结帐。
- 将三个提交压缩在一起。
- 检查您的主分支,并在
64bd9e7
后立即将其重置为提交。
- 将其变基到您的临时分支
你说“git rebase -i HEAD~106
不太实用”。
如果您的意思是生成的脚本文件超过 100 行长,这不是很好,但它会起作用。
如果您的意思是倒数很乏味,计算出您需要 106 次提交 - 正如我有时遇到的那样,那么有一个解决方案。
你需要你想要的最早提交的 parent 的哈希,然后你可以这样做:
git rebase -i <parent-hash> my-branch
或者你也可以
git rebase -i <parent-hash> HEAD
之后会让你保持独立的头脑,你可以随心所欲。
所以在你的例子中,你可以做到
git rebase -i 694bdda HEAD
(但我仍然同意其他评论,关于你是否真的想改变那么久以前的事情。我觉得这有点代码味道,当我发现自己这样做的时候。这对我来说很不寻常有这么长的分支没有 pushing/sharing 它。我也会做一个备份分支来测试它。)
我正在尝试 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
我想压缩 3 个测试提交。在这些情况下,git rebase -i HEAD~106
不是很实用。我正在寻找的是 git rebase -i 64bd9e7:26c612d
.
git是否有这种行为,如果有,我该如何使用它?
我查看了 this post,但没有回答我的问题。
只需使用 rebase -i
并仅压缩那些提交。
git rebase -i <main_branch>
# Now just add `s` in front of all the commits you want to squash
如果你有很多提交,我建议你看一下 rebase --onto
-
git rebase --onto <final_base_commit> <initial_base_commit> <head>
git rebase --onto 694bdda 64bd9e7 5e32fb0
注意:改写历史属于高级操作,请谨慎操作。
为了压缩这三个提交,您需要重写 整个 存储库的历史记录。也就是说,将修改这些测试提交之后提交的所有提交哈希。在我看来,最直接的方法是:
- 创建指向
64bd9e7
的临时分支和结帐。 - 将三个提交压缩在一起。
- 检查您的主分支,并在
64bd9e7
后立即将其重置为提交。 - 将其变基到您的临时分支
你说“git rebase -i HEAD~106
不太实用”。
如果您的意思是生成的脚本文件超过 100 行长,这不是很好,但它会起作用。
如果您的意思是倒数很乏味,计算出您需要 106 次提交 - 正如我有时遇到的那样,那么有一个解决方案。
你需要你想要的最早提交的 parent 的哈希,然后你可以这样做:
git rebase -i <parent-hash> my-branch
或者你也可以
git rebase -i <parent-hash> HEAD
之后会让你保持独立的头脑,你可以随心所欲。
所以在你的例子中,你可以做到
git rebase -i 694bdda HEAD
(但我仍然同意其他评论,关于你是否真的想改变那么久以前的事情。我觉得这有点代码味道,当我发现自己这样做的时候。这对我来说很不寻常有这么长的分支没有 pushing/sharing 它。我也会做一个备份分支来测试它。)