解決方法
法一: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 加入暂存区
開發者一號面臨的狀況:本地master合併了遠端dev的內容,本地多了一個Suffer.txt的檔案。但是發現合錯了分支,要撤銷剛剛的合併操作。但是本地文件又有改動。
ls
<img src="https://img.php.cn/upload/image/270/754/732/1607592020999359.png" title="1607592020999359.png" alt="git實作merge撤銷同時清除merge的本機文件">
git diff HEAD
撤回merge
git reset --merge 7f811bf
或執行
git reset --merge HEAD^
查看本機檔案
並查看檔案內容
再次檢視提交記錄git log --oneline --graph
查看
git diff
工作區和版本庫的差異
暫存區與版本函式庫的差異git diff --cached
最終結果:
驗證法二
再次檢視目前本機檔案ls
注意:这里看到本地原来的文件 test.txt 也将被删除,这不是我所期望的。我只希望可以删除 meger 的文件。
将 test.txt 文件加入 .gitignore 再执行预删除
echo test.txt > .gitignore git add .gitignore git clean -n
阶段结果:可以看到将会被删除的文件只剩下 merge 的多余文件了。
git clean -f
以上是git實作merge撤銷同時清除merge的本機文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!