【问题标题】:Git: Interactively rebase a range of commitsGit:交互式地重新调整一系列提交
【发布时间】:2018-01-02 08:15:30
【问题描述】:

我正在尝试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,但它没有回答我的问题。

【问题讨论】:

  • 极少建议尝试做出可以追溯到那么远的历史。请记住,您在过去所做的任何更改也会改变现在:在被压缩的提交之后的每个提交都被复制到一个新的、不同的提交中,以便提供这个新的历史记录。

标签: git rebase git-interactive-rebase


【解决方案1】:

只需使用 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

注意:重写历史是一项高级操作,因此请小心操作。

Git rebase tutorial

【讨论】:

    【解决方案2】:

    为了压缩这三个提交,您需要为 整个 存储库重写历史记录。也就是说,在这些测试提交之后提交的所有提交哈希都将被修改。在我看来,最直接的方法是:

    1. 创建指向64bd9e7的临时分支和结帐。
    2. 将三个提交压缩在一起。
    3. 签出您的主分支,并在64bd9e7 之后立即将其重置为提交。
    4. 将其重新定位到您的临时分支上

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2017-10-27
      • 2010-12-16
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多