如何在较早的提交之间放置错误修复提交
How to place a bugfix commit between earlier commits
我的存储库中有以下结构:
|-commit9 [bugfix]
|-commit8
|-commit7
|-commit6
|-commit5 [branch-2]
|-commit4
|-commit3
|-commit2 [branch-1]
|-commit1
o-master
错误修复应用在其他提交之上。如何将 commit8
和 commit9
移动到较早的点,例如,立即在 master
之上?
我按照此处的说明进行操作: 现在我的存储库如下所示:
|-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
所以 commit8
和 commit9
是我最初打算的地方,但是其余的提交是重复的,我当然没有分支名称。
我现在如何获得 "linear" 历史记录?
好吧,你到了那里。
首先,推送到远程或在另一个地方克隆您的本地存储库。只是要确定。之后让我们修复那个主分支。在我们继续之前,请确保您在那个分支上。
git checkout master
现在我们不需要其他提交,只需要 8 和 9。因为它们已经存在,我们可以简单地将主分支重置为提交 9 并删除其他提交。不用担心,您的提交仍在分支中,因此不会丢失任何内容。
将 [commit9@master]
替换为您提交的 sha。
git reset --hard [commit9@master]
现在继续检查 bugfix 分支并将其重置为提交 7,就像我们对 master 分支所做的那样。
git checkout bugfix
git reset --hard [commit7@bugfix]
现在,为了恢复线性流程的最后一部分,您可以将您的修补程序合并回 master 并将您的所有工作放在同一个地方。
git checkout master
git merge bugfix
回答原来的问题
我想最简单的方法是检查您的 master 分支。 Cherry-pick 您想要移动的两个提交。返回到您的原始分支并将其重置为两次提交。后者可以通过使用
来完成
git reset --hard HEAD^2
这意味着从我当前的位置删除两个提交。
小警告: 移动提交可能很危险。由于您是根据特定的变更集进行提交的,因此相同的代码在其新位置上的行为可能会有所不同。看到您移动的代码可能取决于代码不再存在。
我的存储库中有以下结构:
|-commit9 [bugfix]
|-commit8
|-commit7
|-commit6
|-commit5 [branch-2]
|-commit4
|-commit3
|-commit2 [branch-1]
|-commit1
o-master
错误修复应用在其他提交之上。如何将 commit8
和 commit9
移动到较早的点,例如,立即在 master
之上?
我按照此处的说明进行操作:
|-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
所以 commit8
和 commit9
是我最初打算的地方,但是其余的提交是重复的,我当然没有分支名称。
我现在如何获得 "linear" 历史记录?
好吧,你到了那里。
首先,推送到远程或在另一个地方克隆您的本地存储库。只是要确定。之后让我们修复那个主分支。在我们继续之前,请确保您在那个分支上。
git checkout master
现在我们不需要其他提交,只需要 8 和 9。因为它们已经存在,我们可以简单地将主分支重置为提交 9 并删除其他提交。不用担心,您的提交仍在分支中,因此不会丢失任何内容。
将 [commit9@master]
替换为您提交的 sha。
git reset --hard [commit9@master]
现在继续检查 bugfix 分支并将其重置为提交 7,就像我们对 master 分支所做的那样。
git checkout bugfix
git reset --hard [commit7@bugfix]
现在,为了恢复线性流程的最后一部分,您可以将您的修补程序合并回 master 并将您的所有工作放在同一个地方。
git checkout master
git merge bugfix
回答原来的问题
我想最简单的方法是检查您的 master 分支。 Cherry-pick 您想要移动的两个提交。返回到您的原始分支并将其重置为两次提交。后者可以通过使用
来完成git reset --hard HEAD^2
这意味着从我当前的位置删除两个提交。
小警告: 移动提交可能很危险。由于您是根据特定的变更集进行提交的,因此相同的代码在其新位置上的行为可能会有所不同。看到您移动的代码可能取决于代码不再存在。