如何在重新基址之前还原一个git提交?

如何在重新基址之前还原一个git提交?,git,Git,以国家为例 A - B - C - D - E - F - G (master) \ B1 - B2 - B3 (B-branch) 现在我想将B分支重新设置为G分支。除了E这是一个合并提交,它在B分支中更改的代码周围添加了一堆“TODO”注释,但这会导致git diff algo的混乱,甚至在每个冲突上都选择git checkout--ours,在重新设置基址后,仍然会出现不好的状态 忽略commit E上的更改并重新设置分支基础的最佳方法

以国家为例

A - B - C - D - E - F - G (master)
             \
             B1 - B2 - B3 (B-branch)
现在我想将B分支重新设置为G分支。除了
E
这是一个合并提交,它在B分支中更改的代码周围添加了一堆“TODO”注释,但这会导致git diff algo的混乱,甚至在每个冲突上都选择
git checkout--ours
,在重新设置基址后,仍然会出现不好的状态


忽略commit E上的更改并重新设置分支基础的最佳方法是什么?

当我绘制分支后答案变得显而易见时回答自己。但是如果有更聪明的东西,请告诉我

答:只需签出master,恢复故障/不希望的提交,然后照常进行

# NOTE: you can name a copy of master any other name to keep
#       your actual master/main branch clean, using the actual
#       master branch on the example for clarity.
#       if you do use your master branch, reset it back afterwards!
git checkout master
git pull
git revert E
# at this point we have
# A - B - C - D - E - F - G - H(revert E)
git checkout branchB
git rebase master
完成了。现在我们有了

A - B - C - D - E - F - G - H - B1 - B2 - B3
如果我们将
H
称为
B0
,则可以更容易地从拉请求的角度可视化分支的实际外观:

before:
master: A - B - C - D - E - F - G
B-branch:    `- B1 - B2 - B3

after:
master: A - B - C - D - E - F - G
B-branch:                        `- B0 - B1 - B2 - B3
这是一个最新的干净合并。如果需要的话,您可以很容易地在B4提交上添加E的更改,而不会因为每次提交都会发生冲突而发疯,如果让git rebase这样做的话


请注意,您可以根据需要恢复任意数量的提交;)如果在以后处理永久修复时添加了问题的“临时”解决方案,那么这是完美的。它还准确地记录了所做的事情,而不是在重新修改的冲突后提交中隐藏回复。

在我绘制分支后,答案变得显而易见时回答自己。但是如果有更聪明的东西,请告诉我

答:只需签出master,恢复故障/不希望的提交,然后照常进行

# NOTE: you can name a copy of master any other name to keep
#       your actual master/main branch clean, using the actual
#       master branch on the example for clarity.
#       if you do use your master branch, reset it back afterwards!
git checkout master
git pull
git revert E
# at this point we have
# A - B - C - D - E - F - G - H(revert E)
git checkout branchB
git rebase master
完成了。现在我们有了

A - B - C - D - E - F - G - H - B1 - B2 - B3
如果我们将
H
称为
B0
,则可以更容易地从拉请求的角度可视化分支的实际外观:

before:
master: A - B - C - D - E - F - G
B-branch:    `- B1 - B2 - B3

after:
master: A - B - C - D - E - F - G
B-branch:                        `- B0 - B1 - B2 - B3
这是一个最新的干净合并。如果需要的话,您可以很容易地在B4提交上添加E的更改,而不会因为每次提交都会发生冲突而发疯,如果让git rebase这样做的话


请注意,您可以根据需要恢复任意数量的提交;)如果在以后处理永久修复时添加了问题的“临时”解决方案,那么这是完美的。它还准确地记录了所做的事情,而不是在返工的冲突后提交中隐藏回复。

酷,这对你真的有效吗?此外,你还遗漏了一个步骤:你需要将master重置回G。否则E的回复将持续到master的未来,听起来不太好。@matt会像我一样添加一个关于使用master的注释,很酷,这对你有效吗?你还遗漏了一个步骤:你需要将master重置为G。否则E的恢复将持续到master的未来,这听起来不太好。@matt会像我一样添加一个关于使用master的注释