git 如何在分支之前的两个提交之间插入一个提交

hts6caw3  于 2023-02-28  发布在  Git
关注(0)|答案(1)|浏览(262)

我想知道如何在两个旧提交之间插入一个新提交(提交X),但是(这是比较复杂的部分)我想在"分支点"之前插入(在本例中是提交"B")。
例如:
之前:

  1. A -- B -- C <<< master
  2. \
  3. D -- E <<< branch

之后:

  1. new commit
  2. |
  3. |
  4. A -- X -- B -- C <<< master
  5. \
  6. D -- E <<< branch

我见过很多很好的答案,当这里没有分支时,它们非常有效:

但是当在分支点之前插入一个提交时,这些选项都不起作用,因为它们修改了树的"上游"部分。
解决这个问题的最好办法是什么?
对于上下文,我发现自己经常需要这样做的原因是,当我开始一个新的特性分支时,我意识到(在几次提交之后)一些改变应该更早地在主分支上完成,而不是在新特性分支上完成,例如,修改一些. vscode文件或更属于主分支而不是特性分支的代码的一些结构重构。
在这种情况下,这是"正确的做法"吗?

ix0qys7i

ix0qys7i1#

这些都是普通的变基....在 oldB中设置一个指针,这样运行第二次变基就更简单了。

  1. git branch old-B B

现在你有了一个名为old-B的分支,指向当前的B

  1. E <- (branch)
  2. |
  3. D
  4. | C <- (master)
  5. |/
  6. B <- (old-B)
  7. |
  8. A

现在,取其中的任何一个配方,将Xinsertmaster中,这样就得到了这个结果(通常是通过rebase或cherry-picks完成的):

  1. C <- (master)
  2. |
  3. B
  4. |
  5. X
  6. |
  7. A

注意我是如何从图表中删除branch的......分支仍然存在,但现在整个图表 * 实际上 * 是这样的:

  1. C' <- (master)
  2. |
  3. B'
  4. |
  5. X
  6. | E <- (branch)
  7. | |
  8. | D
  9. | |
  10. | B <- (old-B)
  11. |/
  12. A

请注意,您是如何拥有原始BB'的 * 克隆 * 的,克隆与原始并不完全相同,因为现在包括了X的更改
此时,你所要做的就是将old-B..branch范围内的提交放在B'之上,这可以通过下面的rebase来实现:

  1. git rebase old-B branch --onto B'

然后你会得到这个

  1. C' <- (master)
  2. |
  3. | E' <- (branch)
  4. | |
  5. | D'
  6. |/
  7. B'
  8. |
  9. X
  10. |
  11. A
展开查看全部

相关问题