git實現(xiàn)merge撤銷同時清除merge的本地文件

git教程欄目介紹如何清除merge

git實現(xiàn)merge撤銷同時清除merge的本地文件

推薦:git教程

一、開門見山

解決辦法
法一:git reset –merge merge前的任何一次提交的hash串
注1

  • 如果工作區(qū)在merge之后沒有任何改動,大膽的用此方法。
  • 如果工作區(qū)在merge之后有了改動,那么此方法會重置工作區(qū)的一切修改,慎用。但是會保留暫存區(qū)的改動。

注2:當(dāng)MERGE_HEAD 在當(dāng)前的提交上的時候 (就是當(dāng)合并分支時遇到錯誤或者沖突,分支旁邊會多出“|MERGING”這個東西)git merge –abort 與此方法一樣
法二:

git reset merge前的任何一次提交的hash串 git clean -n #預(yù)刪除 #將預(yù)刪除不想刪除的文件加入.gitignore git add .gitignore git clean -f

二、構(gòu)造環(huán)境

約定:遠(yuǎn)程倉庫 URL 使用 remote url ?代替
1、模擬開發(fā)者一號

mkdir gitTest #新增文件夾gitTest cd gitTest git init git remote add origin "remote url"  echo "長太息以掩涕兮, 哀民生之多艱。" > lyrics.txt #新建 lyrics.txt 并在里面寫入文字 git add lyrics.txt #將 lyrics.txt加入暫存區(qū) git commit -m "lyrics.txt from user 1" git push origin master git checkout -b dev git push origin dev:dev

2、模擬開發(fā)者二號

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、模擬開發(fā)者一號

git checkout master git merge origin/dev #合并遠(yuǎn)程dev分支 echo "余雖好修姱以鞿羈兮, 謇朝誶而夕替。" >> lyrics.txt  #修改文件 lyrics.txt  echo "余雖好修姱以鞿羈兮, 謇朝誶而夕替。" > test.txt #新建test并寫入內(nèi)容 git add test.txt #將 test.txt 加入暫存區(qū)

三、撤銷 merge

開發(fā)者一號面臨的情況:本地master合并了遠(yuǎn)程dev的內(nèi)容,本地多了一個Suffer.txt的文件。但是發(fā)現(xiàn)合錯了分支,要撤銷剛剛的合并操作。但是本地文件又有改動。

  • 查看當(dāng)前本地文件 ls

    git實現(xiàn)merge撤銷同時清除merge的本地文件

  • 查看工作區(qū)和版本庫的區(qū)別 git diff HEAD

git實現(xiàn)merge撤銷同時清除merge的本地文件

  • 查看提交歷史 git log –oneline –graph

    git實現(xiàn)merge撤銷同時清除merge的本地文件


驗證法一
  • 撤回 merge git reset –merge 7f811bf 或執(zhí)行g(shù)it reset –merge HEAD^
    HEAD^此例中是7f811bf,上面提交歷史可看到7f811bf就是merge前提交的hash串

  • 查看本地文件 ls 并查看文件內(nèi)容

    git實現(xiàn)merge撤銷同時清除merge的本地文件

  • 再次查看提交記錄 git log –oneline –graph

    git實現(xiàn)merge撤銷同時清除merge的本地文件

  • 查看

    • 工作區(qū)和暫存區(qū)的區(qū)別 git diff
    • 工作區(qū)和版本庫的區(qū)別 git diff HEAD
    • 暫存區(qū)和版本庫的區(qū)別 git diff –cached

      git實現(xiàn)merge撤銷同時清除merge的本地文件

最終結(jié)果: 本地文件改動都被重置了(即開發(fā)者一號merge后增加的–余雖好修姱以鞿羈兮, 謇朝誶而夕替,被刪除了),但暫存區(qū)還有內(nèi)容。故工作區(qū)merge 后有改動慎用


驗證法二
  • 撤回 merge git reset 7f811bf

  • 再次查看當(dāng)前本地文件 ls

git實現(xiàn)merge撤銷同時清除merge的本地文件

  • 再次查看提交記錄 git log –oneline –graph

    git實現(xiàn)merge撤銷同時清除merge的本地文件

階段結(jié)果:很明顯可以看到,merge已經(jīng)回滾了,但是本地合并過來的文件依然還在。還要將多余合并的文件(Suffer.txt)刪除。

  • 在刪除之前可以先看看執(zhí)行刪除操作會刪掉那些內(nèi)容(預(yù)刪除) git clean -n

git實現(xiàn)merge撤銷同時清除merge的本地文件

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

  • 將 test.txt 文件加入 .gitignore 再執(zhí)行預(yù)刪除

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

git實現(xiàn)merge撤銷同時清除merge的本地文件

階段結(jié)果:可以看到將會被刪除的文件只剩下 merge 的多余文件了。

  • 執(zhí)行 刪除操作 git clean -f
  • 最終結(jié)果

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享