git-推送后还原合并

我执行的步骤:

我有两个分支branch1和branch2,

$git branch --Initial state
$branch1

$git checkout branch2
$git pull origin branch1 --Step1

我解决了冲突,并做了

$git commit -m "Merge resolved"

然后

$git checkout branch1
$git merge branch2
$git push origin branch1

现在我意识到在第一步时,自动合并删除了一些代码并推送了更改代码,现在我想回到我的初始状态以还原任何更改。寻找一些即时帮助吗?

Bijendra asked 2019-11-14T08:49:21Z
3个解决方案
70 votes

您可以按照官方指南还原合并,但是这使Git误认为合并的提交仍在目标分支上。

基本上,您必须:

git revert -m 1 (Commit id of the merge commit)
aleroot answered 2019-11-14T08:49:51Z
21 votes

尝试使用git push -f来查找分支在合并之前的位置,并尝试使用git reset --hard <commit number>来还原旧版本。

Reflog将显示分支的较旧状态,因此您可以将其返回到您喜欢的任何更改集。

使用git reset时,请确保您在正确的分支中

要更改远程存储库历史记录,可以执行git push -f,但是不建议这样做,因为有人可能已经下载了由您推送的更改。

Ilya Ivanov answered 2019-11-14T08:50:35Z
3 votes

第一种选择是使用git revert

git revert -m 1 [sha-commit-before-merge]

git revert将还原更改,但将保留历史记录。 因此,您将无法继续在同一个分支中工作,因为您再也看不到合并分支与功能分支之间的实际差异。也可以使用以下方式删除历史记录。 仅当您是当前唯一推动更改的分支时,请非常小心地执行此操作。

git reset --hard [sha-commit-before-merge]
git push [origin] [branch] --force
Asanka sanjaya answered 2019-11-14T08:51:07Z
translate from https://stackoverflow.com:/questions/12534312/revert-a-merge-after-being-pushed