2021-05-12 14:32:11
Git 復原所有未提交(Commit)的內容
2020-06-16 16:41:00
擼了好多程式碼,但是突然設計改了(~~o(>_<)o ~~);或者引入個第三方庫,後來又發現用不著,想刪掉,但檔案太多了(比如幾百個);那,怎麼辦呢,都不想了...Git 比人聰明,所以能很方便的幫我們解決問題。
場景一
需要復原的內容檔案屬於未跟蹤的狀態。如下命令產生的場景:
mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' > file1.log
git status
以上命令產生了file1.log
檔案,該檔案未被執行過git add
、也不在版本庫中。清除此類未被跟蹤的檔案:
git clean -fdx
場景二
需要復原的內容已被git add
暫存,但未執行git commit
提交。如下命令產生的場景:
mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' > file1.log
git add .
git status
那麼執行以下命令即可取消檔案的暫存:
git rm --cached -r .
或者,使用:
git reset
也可以取消所有檔案的暫存。
然後,我們再執行git clean -fdx
清除檔案。
場景三
已提交在版本庫中的檔案發生了變更、但修改的內容未暫存。如下命令產生的場景:
mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' >> file1.log
git add .
git commit -m '第1次提交'
echo '第2次輸入的內容' >> file1.log
git status
這種情況,我們可用:
git checkout .
就可以清除所有變更內容。
場景四
已在版本庫中的檔案發生了變更、且已git add
暫存。如下命令產生的場景:
mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' >> file1.log
git add .
git commit -m '第1次提交'
echo '第2次輸入的內容' >> file1.log
git add .
git status
這種情況,比場景三僅多了步暫存,那我們可以先取消暫存、然後再檢出:
git reset
git checkout .
也就是場景二和場景三的混合情況。
總結
我們以上所有場景都是內容未被提交(commit)的情況下。如果是復原提交操作,那就是其他方法了。
基於以上,我們發現,如果對於已修改的所有內容,我們都不想要了,想回到最乾淨的上個提交版本的狀態。那麼,3個命令就可以搞定一切:
git reset
git checkout .
git clean -fdx
最後,再說個小白都能解決該類問題的工具 —— SourceTree,自行嘗試吧。
相關文章