gpt4 book ai didi

Git:如何编辑具有多个后代分支的旧提交?

转载 作者:行者123 更新时间:2023-12-04 18:07:29 24 4
gpt4 key购买 nike

我的 git 仓库的历史是这样的:

* (topic2) commit_11
* (topic1) commit_10
* commit_9
* commit_8
* (HEAD, master) commit_7
* commit_6
* commit_5
* commit_4 <- I wanted to edit this commit.
* commit_3

我也是这样

git rebase -i commit_3

并在编辑器中将 pick 替换为 edit for commit_4。我更正了变量名中的一些拼写错误,然后

git add .
git commit --amend
(rename commit)
git rebase --continue

现在历史看起来像这样:

* (HEAD, master) commit_7.1
* commit_6.1
* commit_5.1
* commit_4.1 <- Edited commit.
| * (topic2) commit_11
| * (topic1) commit_10
| * commit_9
| * commit_8
| * commit_7
| * commit_6
| * commit_5
| * commit_4 <- Original commit.
|/
* commit_3

我想让我的历史像以前一样干净利落。我尝试了我之前多次成功使用的方式

git checkout topic1
git rebase master

但它在应用第一个补丁时以冲突告终。我手动解决了它们。但是当我尝试 git rebase --continue 时,它告诉我“Nothing to commit”。

如何处理这个问题,为什么会出现这个问题?

最佳答案

(我冒昧地修改了你的图表以表明当你 rebase 时,所有提交都会改变,即使内容没有。你的新提交集将与原创。)

这里最简单的解决方案是使用--onto。查看此链接,从文本“这里是移植主题分支的方式”开始:git rebase

所以在你的情况下,它将是:

git rebase --onto commit_7.1 commit_7 topic1

换句话说,将commit_7之后直到(包括)topic1 的提交,移植到commit_7.1。

不过,您可能仍然会遇到必须手动修复的 merge 失败。

我建议您在执行此操作时,在 topic1 提交上创建一个额外的分支。称其为 topic1old 或其他名称。如果 rebase 不正确,这将使返回更容易;您可以将您的 topic1 硬重置回该提交。

编辑:为什么简单的 git rebase master 不起作用?

如果您不另行说明,git rebase 会假定您正在对上游分支进行 rebase 。

但是正如您从我修改图表的方式中看到的那样,topic1 和 master 不再有太多共同点。如果您对 master 进行简单的 rebase ,topic1 将尝试将您的所有提交 rebase 到 master 上的所有提交。这意味着你会得到类似的东西:

  • (主题 1)commit_10
  • commit_9
  • commit_8
  • commit_7
  • commit_6
  • commit_5
  • commit_4
  • (负责人,硕士)commit_7.1
  • commit_6.1
  • commit_5.1
  • commit_4.1 <- 编辑提交。
  • commit_3

现在 Git 很聪明,不会重复已经存在的提交。显然,如果您进行了 X、Y 和 Z 的更改,然后稍后的提交再次进行这些更改,Git 只会忽略后面的提交,因为这些更改已经存在。

但是让事情变得棘手的是您对提交 4 的更改。结果是之后的所有提交都提交到另一组代码。这留下了进行大量 merge 的潜在必要性。

使用 --onto 可以解决这个问题,因为它允许您使用不同的基数。你是说:“我不关心 commit_4(因为我更改了它)也不关心 commit_5、_6 和 _7(因为我已经 merge 了它们,它们与我的主题分支中的它们基本相同)。因此,从 commit_8 开始,仅在我已经处理过的内容之上重新设置那些更改。”

关于Git:如何编辑具有多个后代分支的旧提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com