首頁 >開發工具 >Git >git實作merge撤銷同時清除merge的本機文件

git實作merge撤銷同時清除merge的本機文件

coldplay.xixi
coldplay.xixi轉載
2020-12-10 17:29:396256瀏覽

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

    <img src="https://img.php.cn/upload/image/270/754/732/1607592020999359.png" title="1607592020999359.png" alt="git實作merge撤銷同時清除merge的本機文件">

  • #查看工作區和版本庫的差異

    git diff HEAD

git實作merge撤銷同時清除merge的本機文件

    #查看提交歷史
  • git log --oneline --graph

    git實作merge撤銷同時清除merge的本機文件


  • 撤回merge git reset --merge 7f811bf 或執行
    git reset --merge HEAD^

  • HEAD^此例中是7f811bf,上面提交歷史可看到7f811bf是merge前提交的hash字串
  • 查看本機檔案

    ls

    並查看檔案內容git實作merge撤銷同時清除merge的本機文件


  • git實作merge撤銷同時清除merge的本機文件


    • 再次檢視提交記錄git實作merge撤銷同時清除merge的本機文件git log --oneline --graph


  • 查看

  • 工作區和暫存區的差異

    git diff
    工作區和版本庫的差異

    git diff HEAD

暫存區與版本函式庫的差異git實作merge撤銷同時清除merge的本機文件git diff --cached


  • git實作merge撤銷同時清除merge的本機文件
    最終結果:

    本地檔案改動都被重置了(即開發者一號merge後增加的--餘雖好修姱以鞿羈兮, 謇朝諦而夕替,被刪除了),但暫存區還有內容。故工作區merge 後有改動
  • 慎用

驗證法二

  • 撤回merge git reset 7f811bf

再次檢視目前本機檔案git實作merge撤銷同時清除merge的本機文件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

git實作merge撤銷同時清除merge的本機文件

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

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

以上是git實作merge撤銷同時清除merge的本機文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jianshu.com。如有侵權,請聯絡admin@php.cn刪除