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 中的情况一样,可能有很多方法可以实现这一点,但是以下应该有效:

  1. 在分支 Y 上将其重置为 mastergit reset --hard master
  2. Cherry-pick 您的提交:git cherry-pick C..F(假设 EF 是您分支上 C 之后的第一个和最新的提交 ID)。

已编辑:正如@eftshift0 指出的那样,我最初在 git cherry-pick 语句中有错误的提交 ID - 现在已修复。

可以这样轻松完成:

git rebase --onto origin/master origin/X origin/Y

鉴于您正在使用远程引用,您将处于分离的 HEAD 上,因此您必须这样做才能将生成的分支推送到源的分支 Y:

git push origin -f HEAD:Y