删除/撤消Sourcetree上的合并

时间:2014-03-20 15:06:17

标签: git git-merge atlassian-sourcetree

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

  

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

     

致命:恢复失败“

分支现在看起来像这样:

enter image description here

我想删除合并并将其置于一个状态,使其不再说master(4 behind)

4 个答案:

答案 0 :(得分:81)

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

  1. 查看你犯了错误的分支
  2. 右键单击要将分支重置为
  3. 的提交
  4. 点击"将当前分支重置为此提交"
  5. 选择" Hard"模式并单击"确定"
  6. 不幸的是你需要终端做这一点。在终端中键入git push origin name_of_branch --force(您可能需要输入您的git repo用户名和密码才能接受该命令)
  7. 如果稍后会弹出一条消息,询问您是要中止该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,它将创建相对于引入的更改的反向提交 来自其他父提交。

如果您稍后决定要从另一个引入更改 父母再次,然后你需要添加另一个恢复提交的恢复提交 你刚刚做出的反转提交(一种被称为“恢复它的技术”) 恢复“)。

另见:

  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

答案 2 :(得分:1)

我发现了没有命令行的另一种方法,虽然有点丑陋,但是可以完成工作。

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

好吧...返回源代码树,然后检出Head(最新的提交到您的远程数据库),然后再次导航到项目文件夹,请确保您可以看到隐藏的文件夹,因为您必须能够看到一个文件夹叫做“ .git”

project folder

删除当前项目中的所有“ .git”,这意味着当前项目中除了“ .git”文件夹外什么都没有,然后导航至“复制”文件夹并复制“ .git”文件夹中的所有内容,然后将内容粘贴到当前项目中(仅包含“ .git”文件夹的项目)

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

结束。


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

Obs2:此过程不会从Git中删除您的更改,提交会在那里,您正在做的是删除更改并提交。

答案 3 :(得分:0)

请按照以下步骤操作:

重组合并

Master被合并,并由于冲突/不需要的代码而被推入Develop。

要使用Sourcetree还原:

  1. 选择“开发”,选择必须将分支还原到的最后一次提交。
  2. 右键单击该分支,然后选择“Reset develop to this commit”
  3. 从弹出式菜单的左下角选择hard已完成。

此后不应拉动。如果发生任何拉动,请使用以下端子恢复。

现在将母版合并到开发中。

要使用终端还原:

  1. 选择“开发”,选择必须将分支还原到的最后一次提交。
  2. 从Sourcetree打开终端
  3. 键入git reset --hard <commit_before_merge id long one>
  4. 如果任何拉取计数出现在源树中,请键入git push -f,并完成。

将母版合并到开发中。