Git 撤銷全部未提交(Commit)的內容

擼了好多代碼,可是忽然設計改了( o(>_<)o );或者引入個第三方庫,後來又發現用不着,想刪掉,但文件太多了(好比幾百個);那,怎麼辦呢,都不想了...Git 比人聰明,因此能很方便的幫咱們解決問題。

場景一

須要撤銷的內容文件屬於未跟蹤的狀態。以下命令產生的場景:git

mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' > file1.log
git status

以上命令產生了file1.log文件,該文件未被執行過git add、也不在版本庫中。清除此類未被跟蹤的文件:segmentfault

git clean -fdx

場景二

須要撤銷的內容已被git add暫存,但未執行git commit提交。以下命令產生的場景:app

mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' > file1.log
git add .
git status

那麼執行如下命令便可取消文件的暫存:工具

git rm --cached -r .

或者,使用:post

git reset

也能夠取消全部文件的暫存。url

而後,咱們再執行git clean -fdx清除文件。.net

場景三

已提交在版本庫中的文件發生了變動、但修改的內容未暫存。以下命令產生的場景:設計

mkdir git-tmp
cd git-tmp
git init
echo '第1次輸入的內容' >> file1.log
git add .
git commit -m '第1次提交'
echo '第2次輸入的內容' >> file1.log
git status

這種狀況,咱們可用:code

git checkout .

就能夠清除全部變動內容。get

場景四

已在版本庫中的文件發生了變動、且已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/gi...
更多文章請訪問個人我的博客: https://shockerli.net
相關文章
相關標籤/搜索