Git 将子分支变基为 master
Git rebase child branch to master
我在 Git 存储库中遇到以下情况
A - B [origin/master]
\
C [origin/X]
\
E - F [origin/Y]
开始Y
的时候没有意识到自己是从X
分支出来的,本来打算从master
分支的。
如何在不包含提交 C
的情况下 将 Y
变基到 master ?
(X
上的更改是针对 Y
上的提交未触及的文件)
我想以以下结尾:
A - B [origin/master]
\ \
\E-F[origin/Y]
\
C [origin/X]
我尝试了 git rebase master
,它似乎没有任何改变,输出是:
Current branch Y is up to date.
与 Git 中的情况一样,可能有很多方法可以实现这一点,但是以下应该有效:
- 在分支
Y
上将其重置为 master
:git reset --hard master
。
- Cherry-pick 您的提交:
git cherry-pick C..F
(假设 E
和 F
是您分支上 C
之后的第一个和最新的提交 ID)。
已编辑:正如@eftshift0 指出的那样,我最初在 git cherry-pick
语句中有错误的提交 ID - 现在已修复。
可以这样轻松完成:
git rebase --onto origin/master origin/X origin/Y
鉴于您正在使用远程引用,您将处于分离的 HEAD 上,因此您必须这样做才能将生成的分支推送到源的分支 Y:
git push origin -f HEAD:Y
我在 Git 存储库中遇到以下情况
A - B [origin/master] \ C [origin/X] \ E - F [origin/Y]
开始Y
的时候没有意识到自己是从X
分支出来的,本来打算从master
分支的。
如何在不包含提交 C
的情况下 将 Y
变基到 master ?
(X
上的更改是针对 Y
上的提交未触及的文件)
我想以以下结尾:
A - B [origin/master] \ \ \E-F[origin/Y] \ C [origin/X]
我尝试了 git rebase master
,它似乎没有任何改变,输出是:
Current branch Y is up to date.
与 Git 中的情况一样,可能有很多方法可以实现这一点,但是以下应该有效:
- 在分支
Y
上将其重置为master
:git reset --hard master
。 - Cherry-pick 您的提交:
git cherry-pick C..F
(假设E
和F
是您分支上C
之后的第一个和最新的提交 ID)。
已编辑:正如@eftshift0 指出的那样,我最初在 git cherry-pick
语句中有错误的提交 ID - 现在已修复。
可以这样轻松完成:
git rebase --onto origin/master origin/X origin/Y
鉴于您正在使用远程引用,您将处于分离的 HEAD 上,因此您必须这样做才能将生成的分支推送到源的分支 Y:
git push origin -f HEAD:Y