首页 > 解决方案 > Git rebase 错误的提交

问题描述

我已经将一个提交(Helm 图表)推送到了错误的分支,然后 CI 自动创建了 Helm 包并在该分支上进行了另一个提交。然后另一个用户将他的提交推送到同一个分支上。所以 git log 说:

commit 100d13 (HEAD -> MyNewBranch, origin/release/1.2.3.4, origin/MyNewBranch)
Merge: 4a1ea73 af30075
Author: xyz
Date:   Wed Feb 20 17:22:41 2019 +0000

    Merge pull request #14 from Repo/branch-1

    commit message

commit af30075 (origin/branch-1)
Author: Build Bot
Date:   Wed Feb 20 17:20:45 2019 +0000

    [ci skip] build 94:

commit 67d5135
Author: abc
Date:   Wed Feb 20 17:09:41 2019 +0000

    commit message

commit 4a1ea73
Author: Build Bot
Date:   Tue Feb 19 10:21:28 2019 +0000

    [ci skip] build 88: Added prometheus-0.2.0.tgz to repo.

commit 63fac96
Author: Me
Date:   Tue Feb 19 10:17:40 2019 +0000

    My wrong commit message

commit 26bd737
Merge: 1059c5f 25c082a
Author: xyz
Date:   Thu Feb 14 09:08:25 2019 +0000

    Merge pull request #8 from Repo/branch-2

    commit message

因此,在提交 100d13 中,我从 origin/release/1.2.3.4 创建了新分支,这是我将更改推送到的分支。我想要的只是将 63fac96 和 4a1ea73 重新设置为 origin/MyNewBranch。我怎样才能正确地做到这一点?

编辑:

                               /--- origin/MyNewBranch ---
--- origin/release/1.2.3.4 ---/                            

我想将两个提交 63fac96 和 4a1ea73 从 release/1.2.3.4 重新设置为 origin/MyNewBranch 并仅将它们放在那里。

标签: gitrebase

解决方案


我将这个问题理解为:

您不小心将两个提交合并到 release/1.2.3.4 中,这些提交打算用于另一个分支。在此之后,其他人致力于同一分支。

您希望将这些提交从 release/1.2.3.4 分支中删除并移至它们所属的新分支。


我的假设:

  • 您不关心保留这些提交的 SHA1(即我建议挑选樱桃)。
  • 您确实想保留发布分支上的历史记录。
  • 您不关心在现有的 MyNewBranch 上保留状态。在它的位置创建一个新的对你来说是可以的。

解决方案:

我的新分支

  • 删除分支 MyNewBranch。您将创建一个具有相同名称的新名称:
git branch -D MyNewBranch
  • 结帐26bd737(事故发生前的SHA1):
git checkout 26bd737
  • 从那里创建新分支:
git checkout -b MyNewBranch
  • 樱桃以正确的顺序挑选两个提交:
git cherry-pick 63fac96
git cherry-pick 4a1ea73
  • 推这个分支:
git push origin MyNewBranch --force

这个分支完成了。

发布/1.2.3.4

  • 签出发布分支:
git checkout release/1.2.3.4
  • 将不应该存在的两个提交以相反的顺序恢复到它们提交的内容:
git revert 4a1ea73
git revert 63fac96
  • 推那个分支:
git push origin release/1.2.3.4

而已。你完了。Helm 大概会创建一个新包。


推荐阅读