git重新设置错误的提交

时间:2019-02-21 11:24:08

标签: git rebase

我将一个提交(Helm图表)推送到错误的分支,然后CI自动创建了Helm软件包,并在该分支上自动创建了另一个提交。然后,另一个用户将其提交推送到同一分支上。所以git日志说:

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 ---/                            

我想将两个commits 63fac96和4a1ea73从release / 1.2.3.4重新部署到origin / MyNewBranch并仅在其中存在。

1 个答案:

答案 0 :(得分:0)

我理解这个问题:

您不小心将了两个提交给另一个分支的提交合并到release / 1.2.3.4中。此后,其他人又承诺到同一个分支。

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


我的假设:

  • 您不在乎保留那些提交的SHA1(即,我正在提议摘樱桃)。
  • 您确实想保留发行分支上的历史记录。
  • 您不必担心在现有MyNewBranch上保留状态。可以在其位置创建一个新的文件。

解决方案:

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大概会创建一个新包。