当前位置:   article > 正文

git合并代码分支发生支冲突撤销---IDEA 撤销 merge 操作_取消merge

取消merge

目录

一、前言

二、解决方案 - 通过 Git Bash 命令行解决

1、合并过程中未发生冲突

2、合并过程中发生冲突

三、解决方案 - 通过 IDEA 解决(附带详细的操作图)

1、合并过程中未发生冲突

方法二:通过 git reset --hard [commit id]

2、合并过程中发生冲突

四,接下来拉代码可能会出现的问题

git pull的时候出现如下的错误:

五、最后


作为一个开发者,我们都知道Git是一个非常重要的版本控制工具,尤其是在协作开发的过程中。然而,在使用Git的过程中难免会踩一些坑,今天我来给大家分享一个我曾经遇到的问题:在使用IDEA中进行merge操作后如何撤销错误的合并?

一、前言

现在有两个本地分支dev 和 master, 将 dev 合并到 master 后如何撤销?(注意:以上操作还未 push 到远程分支)

需要分两种情况讨论:

  • 合并过程中未发生冲突
  • 合并过程中发生了冲突
二、解决方案 - 通过 Git Bash 命令行解决

这里通过 git bash 命令行的方式解决我们的问题,如果习惯通过 idea 进行版本控制的可以直接看第三部分的操作,附带详细的操作图片

1、合并过程中未发生冲突

方法一:通过 git reset --mixed [commit id]

  1. // 第一步:查看日志,获取 commit id,即下面的cc65...
  2. // 注意:找准 commit id,我们要找的是还没有合并前的 commit,这样我们就可以直接回退到这个 commit
  3. Git命令:git log
  4. 效果如下:
  5. commit cc65773448f8e9d54d40288c3926e8f3d6e88961 (HEAD -> master)
  6. Author: xxxxxxxxxxx
  7. Date: xxxxxxxxx
  8. // 第二步:回退到指定 commit id,并且将回退的代码全部放入到工作区中,这种方式比较保险
  9. // 注意:此时修改过的代码以及新增的文件还在工作区
  10. Git命令:git reset cc65773448f8e9d54d40288c3926e8f3d6e88961
  11. 或 git reset --mixed cc65773448f8e9d54d40288c3926e8f3d6e88961
  12. // 第三步:恢复所有修改过的文件
  13. // 注意:如果有新增的文件是不会清除的,需手动删除,红色的文件就是新增的
  14. Git命令:git checkout . 或 git restore .


方法二:通过 git reset --hard [commit id]

  1. // 第一步:查看日志,获取 commit id,即下面的cc65...
  2. Git命令:git log
  3. // 第二步:回退到指定 commit id,并清空工作目录及暂存区所有修改,简单来说就是你在这个 commit id 之后的所有操作都会被清除
  4. // 注意:该操作比较危险,新手使用该命令需谨慎,请确保你已经掌握了该命令再使用
  5. Git命令:git reset --hard cc657...

2、合并过程中发生冲突

方法一:通过 git merge --abort

  1. // 最安全简便的方法,回到未合并前的状态
  2. Git命令:git merge --abort

方法二:通过 git reset --mixed [commit id]

  1. // 第一步:查看日志
  2. Git命令:git log
  3. // 第二步:回退到指定 commit id,并且将回退的代码全部放入到工作区中,这种方式比较保险
  4. // 注意:此时修改过的代码以及新增的文件还在工作区
  5. Git命令:git reset cc65...
  6.     或 git reset --mixed cc65...
  7. // 第三步:恢复所有修改过的文件
  8. // 注意:如果有新增的文件是不会清除的,需手动删除,红色的文件就是新增的
  9. Git命令:git checkout . 或 git restore .

方法三:通过 git reset --hard [commit id]

  1. // 第一步:查看日志,获取 commit id,即下面的cc65...
  2. Git命令:git log
  3. // 第二步:回退到指定 commit id,并清空工作目录及暂存区所有修改,简单来说就是你在这个 commit id 之后的所有操作都会被清除
  4. // 注意:该操作比较危险,新手使用该命令需谨慎,请确保你已经掌握了该命令再使用
  5. Git命令:git reset --hard cc657...
三、解决方案 - 通过 IDEA 解决(附带详细的操作图)

以下是直接通过 IDEA 解决上述问题的操作流程,由于 idea 的版本可能不同,所以你看到的操作界面可能跟我不同,不过解决思路的一样的,你找到跟我对应的操作选项即可

1、合并过程中未发生冲突


方法一:通过 git reset --soft [commit id]

此时按 Ctrl + k 调出提交窗口,然后 Revert 掉这些文件就可以变回未合并前的状态,具体操作如下:

方法二:通过 git reset --hard [commit id]

注意:此操作比较危险,会清空回退前工作区以及暂存区的所有修改

2、合并过程中发生冲突

当合并发生冲突时,此时处于 Merging 的状态,如果想取消合并,可以用 git merge --abort,这是最简单有效的方法,其他方法就不在这里演示了,具体操作如下

补充一个知识点:IDEA 不小心关闭了解决冲突窗口,怎么重新打开?

idea 版本不同,看到的界面可能不同,不过都差不多,只要找到这个 Resolve Conflicts 就可以

四,接下来拉代码可能会出现的问题

git pull报错:Pull is not possible because you have unmerged files解决

git pull的时候出现如下的错误:
  1. error: Pulling is not possible because you have unmerged files.
  2. hint: Fix them up in the work tree, and then use 'git add/rm <file>'
  3. hint: as appropriate to mark resolution and make a commit.
  4. fatal: Exiting because of an unresolved conflict.

本地的push和merge会形成MERGE-HEAD(FETCH-HEAD)、HEAD(PUSH-HEAD)这样的引用。HEAD代表本地最近成功push后形成的引用。MERGE-HEAD表示本地成功pull后形成的引用。我么可以通过MERGE-HEAD或者HEAD,来实现与svn revet类似的效果。


解决
1.将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或者HEAD,还需要–hard。没有后面的      hard,不会冲掉本地工作区。只会冲掉stage区。

git reset --hard FETCH_HEAD

2.接着执行下面命令,就会成功。

git pull
五、最后

以上是我总结的部分方法,但是还有很多其他的方式可以解决,比如 revert 命令,不过它会生成新的提交记录,感兴趣的读者可以去了解下这个命令,希望以上内容能对你有帮助,如有错漏之处,望指正。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/817460
推荐阅读
相关标签
  

闽ICP备14008679号