[英]Rebasing a commit from a branch to another branch
我有一个关于 git 变基的问题。 那里有很多线程,我不确定哪一个适用于我的用例,而且我不想弄乱远程分支,因为我是初学者。
据我所见,我可以使用以下命令:
这是我的情况:
我有一个远程分支 branch_A:branch_A
然后,branch_A 分叉到一个分支 branch_B 和一个分支 branch_C(多次提交)
分支_A - 分支_B
分支_A - 分支_C
然后,我在分支 B 上做了 3 次提交(D1、D2 和 D3),我称之为分支 branch_D:
分支_A - 分支_B - D1 - D2 - D3(分支_D)
分支_A - 分支_C
我将这些推到远程,所以这个 state 在远程。
现在我想将所有 3 个提交从 B - D 移动到 C - D 以获得:
分支_A - 分支_B
分支_A - 分支_C - D1 - D2 - D3 - 分支_D
注意:更改很小(不会发生冲突),所以我可以打一个补丁并应用它,但我想提高我在 git 的水平。
我担心的是我不小心删除了 A、B、C 或 D(虽然我认为删除 branch_D 是可能的,但我知道我可以推动力量)。 我知道我可以使用 gitk --all 而不用推动来防止事情变糟。
我用 git rebase 和 git rebase -i 尝试了几件事,但它似乎没有用。 我也知道我可以 git 合并,但这不是我在这个用例中想要的。
几个关键概念:
因此,据我了解,您的提交图如下所示:
A B D
| v v
| <-x <-x <-x <-x
v /
... <-x
\
<-x <-x
^
C
您要创建的是这样的:
A B
| v
| <-x <-x
v /
... <-x
\
<-x <-x <-x <-x
^ ^
C D
D 指向的两个新提交已使用 C 而不是 B 的父级重新创建。您不需要触摸分支 A、B 和 C; 你只需要重新设置分支 D。
在您有信心之前,您可能需要创建当前分支 D 的备份,以防 go 错误:
git branch D_backup D
然后,我发现最容易理解的git rebase
命令的版本是“git rebase old_parent up_to_old_commit --onto new_parent”,所以:
git rebase B D --onto C
那应该给你留下:
A B D_backup
| v v
| <-x <-x <-x <-x
v /
... <-x
\
<-x <-x <-x <-x
^ ^
C D
如果出错,可以将 D 替换为 D_backup:
git branch -D D
git branch D D_backup
如果一切正常,删除备份,并覆盖分支 D 的远程副本:
git branch -D D_backup
git push --force-with-lease origin D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.