Git 在推送后恢复合并

Git 在推送后恢复合并,git,git-revert,Git,Git Revert,我执行的步骤: 我有两个分支branch1和branch2 $git branch --Initial state $branch1 $git checkout branch2 $git pull origin branch1 --Step1 我解决了冲突,做了一件好事 $git commit -m "Merge resolved" 然后 现在我意识到,在步骤1中,自动合并删除了一些代码,并推送了更改代码,现在,我想回到初始状态,以便还原任何更改。是否要立即获得帮助?尝试使用git ref

我执行的步骤:

我有两个分支branch1和branch2

$git branch --Initial state
$branch1

$git checkout branch2
$git pull origin branch1 --Step1
我解决了冲突,做了一件好事

$git commit -m "Merge resolved"
然后


现在我意识到,在步骤1中,自动合并删除了一些代码,并推送了更改代码,现在,我想回到初始状态,以便还原任何更改。是否要立即获得帮助?

尝试使用
git reflog
查找合并前分支所在的位置,并
git reset--hard
还原旧版本

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

使用git reset时,确保处于正确的分支中


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

您可以在之后恢复合并,但是这使Git错误地认为合并的提交仍然在目标分支上

基本上,你必须:

git revert -m 1 (Commit id of the merge commit)

第一个选项是使用
git revert

git revert -m 1 [sha-commit-before-merge]
git revert
将还原更改,但保留历史记录。因此,您将无法继续在同一分支中工作,因为您再也看不到合并分支和要素分支之间的实际差异。 也可以使用以下方法删除历史记录。当且仅当您是目前唯一推动分支更改的人时,请非常小心地执行此操作

git reset --hard [sha-commit-before-merge]
git push [origin] [branch] --force

在本例中,我将我的分支(例如:我的分支)与另一个要素分支(要素分支)合并,但不合并主分支。 所以我的分支历史是这样的:

my-branch (before merge)

---master----m1----m2----m3---m4
my-branch (after merge)

---master----m1----m2----f1----f2----m3---m4----mergecommit
在将它与另一个在主节点上有提交f1、f2的
功能分支
合并后,它变成了这样:

my-branch (before merge)

---master----m1----m2----m3---m4
my-branch (after merge)

---master----m1----m2----f1----f2----m3---m4----mergecommit
这可能是因为在处理我的分支时,我在2次提交后从master进行了合并,或者2个分支中的一个分支可能没有与master一起更新。 因此在本例中,
git revert-m1
不起作用,因为它将那些
f1
f2
提交保留在两者之间

解决方案很简单,可以在正常情况下使用,我们没有中间提交:

git rebase -i HEAD~6
根据您要更改的过去提交次数,使用适当的数字,而不是6。 现在Vim编辑器打开了,只需将不需要的提交标记为
drop
,然后使用
:wq
验证日志:

git log --oneline 
用力推

git push -f

现在远程分支应该处于以前的状态。

我已将代码推送到远程分支,这将如何从那里还原代码。.如果您已经推了,您不想重新编写本地历史记录,正如Ilya所描述的,对不起,我错过了那件事。。。有时,您可以使用gitpush-f重写远程历史记录。这取决于您的远程存储库配置和其他团队成员(如果他们不会因为强制推送而杀死您的话)。git revert是否不满足您的要求?它给出的消息为:致命:提交b4a758b36a5bde9311061fe7b56e4f47859de052是一个合并,但未提供-m选项@Frederickcheung查看手册中的关于-m选项。很快您就可以使用-m1或-m2了。这将选择要还原到两个父版本中的哪一个。是的,我使用了git revert-m 1 SHA,现在所有更改都作为要在本地提交的更改提交,vim中有一个错误,在还原操作时退出它,我运行了git config--global core.editor/usr/bin/vim,它修复了问题,然后成功地运行了恢复来修复问题。ThanxOne应该小心
1
。它表示合并提交的第一个父级。但是,如果一个(假设是“意外地”将主服务器合并到分支,那么将快进主服务器合并到合并提交-应该使用
-m2
还原主服务器上的合并。注意
1
。它通过部分恢复合并而弄乱了我的存储库,而我希望完全恢复合并。我最终恢复了回复!