Git 撤銷所有未提交(Commit)的內容


擼了好多代碼,但是突然設計改了(~~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,自行嘗試吧。


原文地址: https://shockerli.net/post/git-undo-uncommit-content/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM