撤消已推送到原点的不良合并
Undo bad merge already pushed to origin
情况如下:
我有一个开发分支和一个功能分支,当完成功能时我想将它合并到开发中。冲突出现了,我首先将 develop 拉入功能来解决它然后提交修改但是:
我只提交解决了冲突的文件,其余的忘记了。因此,当我将功能合并到开发中时,它会回滚大量提交...
origin develop> ----o-c-c-c-o-------m------
\ \ /
local feature> f-------m-r-o
提交 'c' 与功能合并,但是当再次与开发合并时我忘记了它们。
我该如何解决这个问题?
编辑:
我对 git 的实验不是很深入,所以我要求的答案比一般的 git reset 更能针对我的问题回应
你做了一个错误的合并。
origin develop> ----o1-c1-c2-c3-o2---------m2------
\ \ /
local feature> f1----------m1-r1-o3
你的错误是在提交 m1
中,并且更改在链中传播得更远。
改写历史
解决这个问题的最干净的方法是重写历史,这样一切仍然正常。但是,这会破坏每个人的历史记录,因此他们需要将他们的分支重置为新的头,仅当您在推送之前发现错误时才推荐。
修复是重做合并,然后重做与主服务器的最终合并。
on branch: feature
: git reset --hard f1
我们将回到提交时的分支状态 f1
on branch: feature
: git merge o2
重做我们的合并,确保这次我们没有丢弃我们的索引
on branch: feature
: git cherry-pick r1
包括提交中引入的更改 r1
on branch: feature
: git cherry-pick o3
包括提交中引入的更改 o3
on branch: feature
: git push -f
强制推送我们的固定功能分支
on branch: feature
: git checkout develop
切换到开发,以便我们修复它
on branch: develop
: git reset --hard o2
我们将回到提交时的分支状态 o2
on branch: develop
: git merge feature
重做主分支合并的功能,这修复了整个链。
on branch: develop
: git push -f
强制推送我们的固定开发分支。
由于您已经推送,最安全的做法(在 develop
上)是挑选丢失的提交。对于每个提交 C,运行 git cherry-pick C
.
情况如下:
我有一个开发分支和一个功能分支,当完成功能时我想将它合并到开发中。冲突出现了,我首先将 develop 拉入功能来解决它然后提交修改但是:
我只提交解决了冲突的文件,其余的忘记了。因此,当我将功能合并到开发中时,它会回滚大量提交...
origin develop> ----o-c-c-c-o-------m------
\ \ /
local feature> f-------m-r-o
提交 'c' 与功能合并,但是当再次与开发合并时我忘记了它们。
我该如何解决这个问题?
编辑:
我对 git 的实验不是很深入,所以我要求的答案比一般的 git reset 更能针对我的问题回应
你做了一个错误的合并。
origin develop> ----o1-c1-c2-c3-o2---------m2------
\ \ /
local feature> f1----------m1-r1-o3
你的错误是在提交 m1
中,并且更改在链中传播得更远。
改写历史
解决这个问题的最干净的方法是重写历史,这样一切仍然正常。但是,这会破坏每个人的历史记录,因此他们需要将他们的分支重置为新的头,仅当您在推送之前发现错误时才推荐。
修复是重做合并,然后重做与主服务器的最终合并。
on branch: feature
:git reset --hard f1
我们将回到提交时的分支状态
f1
on branch: feature
:git merge o2
重做我们的合并,确保这次我们没有丢弃我们的索引
on branch: feature
:git cherry-pick r1
包括提交中引入的更改
r1
on branch: feature
:git cherry-pick o3
包括提交中引入的更改
o3
on branch: feature
:git push -f
强制推送我们的固定功能分支
on branch: feature
:git checkout develop
切换到开发,以便我们修复它
on branch: develop
:git reset --hard o2
我们将回到提交时的分支状态
o2
on branch: develop
:git merge feature
重做主分支合并的功能,这修复了整个链。
on branch: develop
:git push -f
强制推送我们的固定开发分支。
由于您已经推送,最安全的做法(在 develop
上)是挑选丢失的提交。对于每个提交 C,运行 git cherry-pick C
.