我在项目中做了很少的更改(我在远程分支而不是主服务器上工作),我提交了它们并在BitBucket上创建了一个pull请求并将分支合并到master。我忘了在提交后推送我的更改。现在,在尝试将当前分支切换到我的远程分支并在合并之前恢复到提交之后,我设法将所有更改恢复并将其备份到系统中的其他位置。我现在要做的是撤消我所做的错误合并。每次我单击合并并选择“反向提交”时,我会收到以下错误消息:
“错误:提交是合并但没有给出-m选项。
致命:恢复失败“
分支现在看起来像这样:
我想删除合并并将其置于一个状态,使其不再说master(4 behind)
。
答案 0 :(得分:81)
此方法基于历史记录删除:
git push origin name_of_branch --force
(您可能需要输入您的git repo用户名和密码才能接受该命令)如果稍后会弹出一条消息,询问您是要中止该rebase还是继续。点击"继续"。如果您中止,合并将再次出现在您的本地副本上。
这可能是最简单的方法,但由于它是基于历史记录删除,如果其他人正在处理该项目,请务必让他们都知道你在做什么,这样你就不会打破任何人#&# 39; s git repository。
答案 1 :(得分:34)
非常不幸的是,SourceTree并不能让你轻松恢复 合并提交(至少在Windows SourceTree 1.5.2.0中)。但是,还原了 合并可以很容易地从命令行完成,但你想要吗? 通过添加另一个 反向 的提交来恢复合并 合并提交的结果,或者您是否只想从中删除合并提交 历史一共?
如果您没有与其他人分享您的master
分支,那么这是最简单的事情
要做的就是简单地进行硬重置以从中删除合并提交
历史。但是,如果其他人已经拥有该合并提交的副本,那么
当他们尝试重新同步他们的副本时,你会为他们创造额外的工作
master
改写你的版本。
因此,您需要确定要使用的选项。我会给出步骤 对于两者,使用命令行:
git checkout master
git push origin master --force
这将覆盖origin/master
上当前状态的合并提交
您的本地master
分支,从而删除合并提交。
git checkout master
git merge origin/master
git revert -m 1 HEAD
这会使您的本地master
分支与origin/master
同步,并且
然后你可以通过告诉git revert
来添加反向提交
1 st 父母是应被视为“主线”的父母
parent,它将创建相对于引入的更改的反向提交
来自其他父提交。
如果您稍后决定要从另一个引入更改 父母再次,然后你需要添加另一个恢复提交的恢复提交 你刚刚做出的反转提交(一种被称为“恢复它的技术”) 恢复“)。
另见:
答案 2 :(得分:1)
我发现了没有命令行的另一种方法,虽然有点丑陋,但是可以完成工作。
因此,对要回滚的提交进行硬重置,转到项目文件夹(在Mac上使用Finder,在Windows上使用Explorer),然后复制整个文件夹。该“复制”文件夹中的内容是您希望在此过程结束时到达的点。
好吧...返回源代码树,然后检出Head(最新的提交到您的远程数据库),然后再次导航到项目文件夹,请确保您可以看到隐藏的文件夹,因为您必须能够看到一个文件夹叫做“ .git”
删除当前项目中的所有“ .git”,这意味着当前项目中除了“ .git”文件夹外什么都没有,然后导航至“复制”文件夹并复制“ .git”文件夹中的所有内容,然后将内容粘贴到当前项目中(仅包含“ .git”文件夹的项目)
完成。转到源代码树并提交更改,您的项目正是您想要的位置,所有更改都已删除。
结束。
Obs1:立即删除“复制”文件夹,以清除脏文件中的PC。
Obs2:此过程不会从Git中删除您的更改,提交会在那里,您正在做的是删除更改并提交。
答案 3 :(得分:0)
请按照以下步骤操作:
重组合并
Master被合并,并由于冲突/不需要的代码而被推入Develop。
要使用Sourcetree还原:
“Reset develop to this commit”
。hard
。 已完成。 此后不应拉动。如果发生任何拉动,请使用以下端子恢复。
现在将母版合并到开发中。
要使用终端还原:
git reset --hard <commit_before_merge id long one>
git push -f
,并完成。 将母版合并到开发中。