0

0

git实现merge撤销同时清除merge的本地文件

coldplay.xixi

coldplay.xixi

发布时间:2020-12-10 17:29:39

|

6766人浏览过

|

来源于简书

转载

git教程栏目介绍如何清除merge

git实现merge撤销同时清除merge的本地文件

推荐:git教程

一、开门见山

解决办法
法一:git reset --merge merge前的任何一次提交的hash串
注1

  • 如果工作区在merge之后没有任何改动,大胆的用此方法。
  • 如果工作区在merge之后有了改动,那么此方法会重置工作区的一切修改,慎用。但是会保留暂存区的改动。

注2:当MERGE_HEAD 在当前的提交上的时候 (就是当合并分支时遇到错误或者冲突,分支旁边会多出“|MERGING”这个东西)git merge --abort 与此方法一样
法二:

git reset merge前的任何一次提交的hash串
git clean -n #预删除
#将预删除不想删除的文件加入.gitignore
git add .gitignore
git clean -f

二、构造环境

约定:远程仓库 URL 使用 remote url  代替
1、模拟开发者一号

mkdir gitTest #新增文件夹gitTest
cd gitTest
git init
git remote add origin "remote url" 
echo "长太息以掩涕兮, 哀民生之多艰。" > lyrics.txt #新建 lyrics.txt 并在里面写入文字
git add lyrics.txt #将 lyrics.txt加入暂存区
git commit -m "lyrics.txt from user 1"
git push origin master
git checkout -b dev
git push origin dev:dev

2、模拟开发者二号

mkdir gitTest2
cd gitTest2
git clone "remote url" 
cd gitTest
echo "Don't make me suffer" > Suffer.txt
git add Suffer.txt
git commit -m "Suffer.txt from user2"
git push origin dev

3、模拟开发者一号

git checkout master
git merge origin/dev #合并远程dev分支
echo "余虽好修姱以鞿羁兮, 謇朝谇而夕替。" >> lyrics.txt  #修改文件 lyrics.txt 
echo "余虽好修姱以鞿羁兮, 謇朝谇而夕替。" > test.txt #新建test并写入内容
git add test.txt #将 test.txt 加入暂存区

三、撤销 merge

开发者一号面临的情况:本地master合并了远程dev的内容,本地多了一个Suffer.txt的文件。但是发现合错了分支,要撤销刚刚的合并操作。但是本地文件又有改动。

  • 查看当前本地文件 ls

    e72ae239e653bef7482d64c93ef8ab3.png

  • 查看工作区和版本库的区别 git diff HEAD

f49ac50916c1b7d766a7878d480f6da.png

  • 查看提交历史 git log --oneline --graph

    8a933ff1d558357aab94746d04911cc.png


验证法一
  • 撤回 merge git reset --merge 7f811bf 或执行git reset --merge HEAD^
    HEAD^此例中是7f811bf,上面提交历史可看到7f811bf就是merge前提交的hash串

  • 查看本地文件 ls 并查看文件内容

    酷表ChatExcel
    酷表ChatExcel

    北大团队开发的通过聊天来操作Excel表格的AI工具

    下载

    80a40db2c79372d67acbfcf919db23d.png

  • 再次查看提交记录 git log --oneline --graph

    0f68663977aa7a70f598b6a5a7d0563.png

  • 查看

    • 工作区和暂存区的区别 git diff
    • 工作区和版本库的区别 git diff HEAD
    • 暂存区和版本库的区别 git diff --cached

      7a8dd07501c18808be90cb59a6d5a9d.png

最终结果: 本地文件改动都被重置了(即开发者一号merge后增加的--余虽好修姱以鞿羁兮, 謇朝谇而夕替,被删除了),但暂存区还有内容。故工作区merge 后有改动慎用


验证法二
  • 撤回 merge git reset 7f811bf

  • 再次查看当前本地文件 ls

6882cd7f5334c5bd2da63d2f72f856e.png

  • 再次查看提交记录 git log --oneline --graph

    f085625368c6ab4d77275dfeb9674f5.png

阶段结果:很明显可以看到,merge已经回滚了,但是本地合并过来的文件依然还在。还要将多余合并的文件(Suffer.txt)删除。

  • 在删除之前可以先看看执行删除操作会删掉那些内容(预删除git clean -n

af9d93857e817496d0033f0009e2813.png

  • 注意:这里看到本地原来的文件 test.txt 也将被删除,这不是我所期望的。我只希望可以删除 meger 的文件。

  • 将 test.txt 文件加入 .gitignore 再执行预删除

echo test.txt > .gitignore
git add .gitignore
git clean -n

d6f9c303685a2f5210c7baf70c7c78c.png

阶段结果:可以看到将会被删除的文件只剩下 merge 的多余文件了。

  • 执行 删除操作 git clean -f
  • 最终结果

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.7万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号