删除/撤消Sourcetree上的合并

问题描述 投票:48回答:3

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

“错误:提交是一个合并但没有给出-m选项。

致命:恢复失败“

分支现在看起来像这样:

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

git git-merge atlassian-sourcetree
3个回答
82
投票

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

  1. 查看你犯了错误的分支
  2. 右键单击要将分支重置为的提交
  3. 单击“将当前分支重置为此提交”
  4. 选择“硬”模式并单击“确定”
  5. 不幸的是你需要终端做这一点。 在终端中键入git push origin name_of_branch --force(您可能需要输入您的git repo用户名和密码才能接受该命令)

更新:源树的当前版本支持强制推送。这意味着您不需要使用步骤5中提到的命令!当推动标记为“强制”时,可以看到一个复选框。它通常是禁用的。

如何启用强制推送复选框:

  1. “工具”(位于屏幕顶部的蓝色栏中)
  2. “选项”
  3. “Git”标签
  4. “启用强制推送”(第2部分)
  5. “好”

在推送时检查该复选框是否也修复了原始服务器上的错误。

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


34
投票

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

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

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

Remove Commit from History

git checkout master
git push origin master --force

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

Revert Commit with another Reverse Commit

git checkout master
git merge origin/master
git revert -m 1 HEAD

这将使您的本地master分支与origin/master同步,然后您可以通过告诉git revert第一个父级是应该被视为“主线”父级的那个来添加反向提交,并且它将创建相对于从其他父提交带来的更改。

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

也可以看看:

  1. Git去哪儿了?
  2. How do I “un-revert” a reverted Git commit?
  3. git-revert(1) Manual Page
  4. How to revert a faulty merge

1
投票

我发现没有命令行的另一种方式,有点难看,但做的工作。

因此,对要回滚的提交进行硬重置,转到项目文件夹(在Mac上使用Finder或在Windows上使用Explorer)并复制整个文件夹。您在此“复制”文件夹中的内容是您希望在此过程结束时使用的内容。

好吧......回到源代码树,然后检查Head(最新提交到你的遥控器),然后再次导航到项目文件夹,确保你可以看到隐藏的文件夹,因为你必须能够看到一个名为“。混帐”

project folder

删除当前项目中的所有“但.git”,这意味着您当前的项目除了名为“.git”的文件夹外没有任何内容,然后导航到“复制”文件夹并复制除“.git”文件夹以外的所有内容并粘贴内容在当前项目中(仅限“.git”文件夹)

完成。转到源代码树并提交更改,您的项目正是您想要的位置,并删除了所有更改。

结束。


Obs1:立即删除“复制”文件夹以清除脏文件中的电脑。

Obs2:这个过程不会从Git中删除你的更改,提交将在那里,你正在做的是删除你的更改并提交它。

© www.soinside.com 2019 - 2024. All rights reserved.