【问题标题】:git rebase -i --root creates unrelated historygit rebase -i --root 创建不相关的历史
【发布时间】:2020-08-03 16:27:56
【问题描述】:

假设我有以下提交历史:

* E   (HEAD -> mybranch, origin/mybranch) Foo 3
|
* D   Foo 2
|
* C   Update readme
|
* B   Foo 1
|
* A   Initial commit

我想从初始提交中变基并删除所有名为“Foo”的提交,所以我运行

git rebase -i --root

但是,这会创建一个新的、不相关的历史,如下所示:

* C'  (HEAD -> mybranch) Update readme
|
* A'  Initial commit

* E   (origin/mybranch) Foo 3
|
* D   Foo 2
|
* C   Update readme
|
* B   Foo 1
|
* A   Initial commit

另一方面,如果我跑步

git rebase -i A  # where "A" is the commit SHA

我得到了预期的分支行为:

* C'  (HEAD -> mybranch) Update readme
|
| * E   (origin/mybranch) Foo 3
| |
| * D   Foo 2
| |
| * C   Update readme
| |
| * B   Foo 1
|/
* A   Initial commit

那么为什么git rebase --root 的行为会产生不相关的历史记录,我可以让它像我预期的那样表现吗?

【问题讨论】:

  • 您需要在执行 git rebase -i --root 选项时在交互式 rebase 中包含您采取的步骤。
  • 指定--root 使rebase 在每次提交时运行,最终结果是您实际上也将创建一个新根。你说“从最初的提交”,你的意思是你想不理会最初的提交吗?如果是这样,那么使用--root 不是您想要的,而是第二个命令是您想要的。
  • 我的问题是,如果第二个命令执行您想要的操作,为什么您希望 --root 表现得像第二个命令。那你不能简单地使用第二个命令吗?
  • @TimBiegeleisen 实际上只是 drop 所有名为 Foo 的提交,其他提交为 pick
  • --root保证制作不相关的历史。这就是--root 的意义所在。 (要查找当前提交的根的哈希 ID,请使用 git rev-list --max-parents=0 HEAD。如果您愿意,可以为此提交命名,或者根据需要多次命名。)

标签: git rebase


【解决方案1】:

在设置 GitHub Actions 工作流之后,像在问题中那样执行 git rebase --root,结果发现它不会创建不相关的历史记录,这与我在我的 git 版本上运行命令时不同2.24.1.windows.2。所以可能是他们在更新的 git 版本中修补了这种行为。

【讨论】:

    猜你喜欢
    • 2017-08-17
    • 2018-06-19
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2011-07-12
    • 2017-02-23
    • 2018-04-28
    相关资源
    最近更新 更多