如何在早期提交之间进行错误修正提交

时间:2016-08-24 20:20:26

标签: git rebase

我的回购中有以下结构:

|-commit9 [bugfix]
|-commit8
|-commit7
|-commit6
|-commit5 [branch-2]
|-commit4
|-commit3
|-commit2 [branch-1]
|-commit1
o-master

错误修复应用于其他提交之上。如何将commit8commit9移到较早的位置,例如,立即移至master

我按照这里的说明进行操作:How to inject a commit between some two arbitrary commits in the past?现在我的回购看起来如下:

|-commit7
|-commit6
|-commit5
|-commit4
|-commit3
|-commit2
|-commit1
|-commit9 [bugfix]
|-commit8
| |-commit9 [bugfix]
| |-commit8
| |-commit7
| |-commit6
| |-commit5 [branch-2]
| |-commit4
| |-commit3
| |-commit2 [branch-1]
| |-commit1
|/
o-master

所以commit8commit9是我原定的目的,但其余的提交都是重复的,当然我没有分支名称。

如何获得"线性"现在的历史?

1 个答案:

答案 0 :(得分:1)

嗯,你到了那里。

首先,推送到远程或在其他地方克隆您的本地仓库。只是要确定。之后,让我们修复主分支。在我们继续之前,请确保您已经在该分支上。

git checkout master

现在我们不想要那些其他提交,只有8和9.由于它们已经存在,我们可以简单地重置主分支以提交9并删除其他提交。不用担心,你的提交仍然在分支机构中,所以不应该丢失任何东西 [commit9@master]替换为您的提交。

git reset --hard [commit9@master]

现在继续检查bugfix分支并将其重置为提交7,方法与主分支相同。

git checkout bugfix
git reset --hard [commit7@bugfix]

现在最后一部分回到线性流程,你可以将你的修补程序合并回master,让你所有的工作都在同一个地方。

git checkout master
git merge bugfix

回答原来的问题

我想最简单的方法就是检查你的主分支。樱桃 - 选择你想要移动的两个提交。返回原始分支并将其重置为两次提交。后者可以使用

完成
git reset --hard HEAD^2

这意味着从我当前的位置删除两个提交。

小警告:移动提交可能很危险。由于您基于某个更改集进行了提交,因此相同的代码在其新位置可能不会以相同的方式运行。查看移动的代码可能取决于不再存在的代码。