删除/撤消Sourcetree上的合并

Ram*_*ain 52 git git-merge atlassian-sourcetree

我在我的项目中进行了很少的更改(我在远程分支而不是主服务器上工作),我提交了它们并在BitBucket上创建了一个pull请求并将分支合并到master.我忘了在提交后推送我的更改.现在,在尝试将当前分支切换到我的远程分支并在合并之前恢复到提交之后,我设法将所有更改恢复并将其备份到系统中的其他位置.我现在要做的是撤消我所做的错误合并.每次我单击合并并选择"反向提交",我收到以下错误消息:

"错误:提交是合并但没有给出-m选项.

致命:恢复失败"

分支现在看起来像这样:

在此输入图像描述

我想删除合并并将其带到一个状态,以便它不再说master(4 behind)了.

Dan*_*non 85

此方法基于历史记录删除:

  1. 查看你犯了错误的分支
  2. 右键单击要将分支重置为的提交
  3. 单击"将当前分支重置为此提交"
  4. 选择"硬"模式并单击"确定"
  5. 不幸的是你需要终端做这一点.类型git push origin name_of_branch --force为终端(您可能需要输入您的混帐回购协议的用户名和密码,它接受命令)

如果稍后会弹出一条消息,询问您是要中止该rebase还是继续.点击"继续".如果您中止,合并将再次出现在您的本地副本上.

这可能是最简单的方法,但由于它是基于历史删除,如果其他人正在处理项目,请确保让他们都知道你在做什么,这样你就不会破坏任何人的git存储库.

  • 如果只有Sourcetree在后面尝试推送到原点时会发出警告消息.如果警告可以选择强制推送而不是只是让错误,那么整个过程可以通过sourcetree GUI完成,不需要终端命令. (5认同)

小智 36

非常不幸的是,SourceTree不会让您轻松恢复合并提交(至少在Windows SourceTree 1.5.2.0中).但是,可以从命令行轻松完成还原合并,但是您是否希望通过添加另一个与合并提交结果相反的提交来还原合并,或者您是否只想从历史记录中删除合并提交共?

如果您不master与其他人共享您的分支,最简单的方法是简单地执行硬重置以从历史记录中删除合并提交.但是,如果其他人已经拥有该合并提交的副本,那么当他们尝试将其副本master与您的重写版本重新同步时,您将为他们创建额外的工作 .

所以你需要弄清楚你想要使用哪个选项.我将使用命令行为两者提供步骤:

从历史中删除提交

git checkout master
git push origin master --force
Run Code Online (Sandbox Code Playgroud)

这将origin/master使用本地master分支的当前状态覆盖合并提交,从而删除合并提交.

使用另一个反向提交还原提交

git checkout master
git merge origin/master
git revert -m 1 HEAD
Run Code Online (Sandbox Code Playgroud)

这将带来当地master的同步与分支origin/master,然后你可以添加一个反向告诉提交git revert了1 母公司是应该考虑的"主线"父之一,它会造成相反的承诺相对变化从另一个父提交中引入.

如果稍后您决定再次从另一个父进行更改,那么您将需要添加另一个还原提交,以恢复您刚刚进行的还原提交(称为"还原还原"的技术).

也可以看看:

  1. 撤消Git合并?
  2. 如何"取消恢复"恢复的Git提交?.
  3. git-revert(1)手册页.
  4. 如何还原错误的合并.