美文网首页Git使用Gitgit使用记录
git merge 撤销 同时清除 merge 的本地文件

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

作者: steamed_bun | 来源:发表于2018-09-27 09:30 被阅读0次

一、开门见山

解决办法
法一:git reset --merge merge前的任何一次提交的hash串
注1:此方法会重置工作区的一切修改,慎用。但是会保留暂存区的改动。
注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

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

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

验证法一
  • 撤回 merge git reset --merge 7f811bf 执行git reset --merge HEAD^

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

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


  • 查看

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

最终结果: 本地文件改动都被重置了,但是暂存区还有内容。慎用


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

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

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

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

  • 在删除之前可以先看看执行删除操作会删掉那些内容(预删除git clean -n
  • 注意:这里看到本地原来的文件 test.txt 也将被删除,这不是我所期望的。我只希望可以删除 meger 的文件。

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

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

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

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

相关文章

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

    一、开门见山 解决办法法一:git reset --merge merge前的任何一次提交的hash串注1:此方法...

  • Git如何撤销merge操作

    Git如何撤销merge操作。当 merge 以后还有别的操作和改动时,用 git revert:该命令就是为撤销...

  • git merge一个指定文件

    git里面的merge是全merge ,没有单个文件merge。 要实现一个文件的merge ,可以使用git c...

  • git merge

    冲突状态放弃 merge git merge --abort 冲突的文件使用其它分支 git merge -Xth...

  • git 相关操作记录

    1.git merge 撤销 首先保证在 merge 时所在分支,如果没在,先切过去: 使用 git reflog...

  • Git常用命令

    撤销$ git reset [--hard|soft|mixed|merge|keep] [commit|HEA...

  • Git 撤销 merge

    见csdn的博客:http://blog.csdn.net/miniykyk/article/details/52...

  • git本地合并分支

    git 本地合并分支 一、git rebase 二、git merge

  • git merge 忽略文件

    忽略指定文件 启用merge策略(--global酌情添加)git config --global merge.o...

  • git 相关命令

    git merge 和 git rebase 小结: git merge是用来合并两个分支的。git merge ...

网友评论

    本文标题:git merge 撤销 同时清除 merge 的本地文件

    本文链接:https://www.haomeiwen.com/subject/cxfanftx.html