diff差異
工作區(qū)和暫存區(qū) : git diff
工作區(qū)和HEAD : git diff HEAD
暫存區(qū)和HEAD : git diff --cached
不同分支的差異 : git diff dev1.0 master
不同commit的差異:git diff sha1 sha2
指定文件: git diff sha1 sha2 -- test/ab.txt
說明:對于新增的文件渔期,其只存在于工作區(qū)贸人,且處于 Untracked 狀態(tài),Git 認(rèn)為無論是哪兩個 Git 區(qū)域之間的比對都沒有意義痘系,得到的結(jié)果是沒有區(qū)別。使用git status查看饿自;
撤銷操作
本地倉庫恢復(fù)暫存區(qū)內(nèi)容 :
git reset HEAD -- 文件名 # 對某個文件進(jìn)行恢復(fù)
git reset HEAD -- path # 對某個路徑進(jìn)行恢復(fù)
git reset HEAD # 對所有文件進(jìn)行恢復(fù)
(使用 git diff -cached 做比較)
暫存區(qū)恢復(fù)工作區(qū)內(nèi)容 :
git checkout -- 文件名 # 對某個文件進(jìn)行恢復(fù)
git checkout -- path # 對某個路徑進(jìn)行恢復(fù)
git checkout # 對所有文件進(jìn)行恢復(fù)
(使用 git diff 做比較)
本地倉庫恢復(fù)工作區(qū)和暫存區(qū)內(nèi)容 :
git reset --hard HEAD
(使用 git diff HEAD 工作區(qū)和本地倉庫做比較)
git reset HEAD 本地倉庫對暫存區(qū)的恢復(fù)汰翠,加了--hard,對工作區(qū)也一起恢復(fù)璃俗。
回到某個commit有兩種方式:reset和revert(恢復(fù))
git reset HEAD
git reset commit_id
git revert HEAD
git revert -n commit_id -n 表示不立即commit奴璃,只是恢復(fù)工作區(qū)內(nèi)容。
git revert是用一次新的commit來回滾之前的commit城豁,git reset是直接刪除指定的commit苟穆。
清除工作區(qū)變化
git reset --hard HEAD
git clean -df
清除暫存區(qū)變化
git rm -r --cached .
git rm -r --cached -- index.jsp
從工作目錄中刪除所有沒有tracked過的文件和目錄-d
git clean -df
說明:git clean經(jīng)常和git reset --hard一起結(jié)合使用. 記住reset只影響被track過的文件, 所以需要clean來刪除沒有track過的文件. 結(jié)合使用這兩個命令能讓你的工作目錄完全回到一個指定的<commit>的狀態(tài)
git clean的用法
下面轉(zhuǎn)發(fā)文件轉(zhuǎn)發(fā)自:https://www.cnblogs.com/soaeon/p/10908712.html
比較暫存區(qū)和HEAD所含文件的差異?
操作場景如下:
* 修改readme.md 文檔
* vi readme.md
* 加入到暫存區(qū)域
* git add readme.md
* 使用git diff -cached 做比較
比較工作區(qū)和暫存區(qū)所含文件的差異?
操作場景如下:
* 修改readme.md 文檔
* vi readme.md
* 加入到暫存區(qū)域
* git add readme.md
* 使用git diff 做比較
讓暫存區(qū)恢復(fù)成和HEAD的一樣雳旅?
git reset HEAD
暫存區(qū)覆蓋工作區(qū)(將工作區(qū)的修改抹掉)
操作場景如下:
* 修改 re'adme.md
* vi readme.md
* 比較工作區(qū)和暫存區(qū)的問價(jià)差異
* git diff
* 將暫存區(qū)覆蓋工作區(qū)
* git checkout -- readme.md
* 再次比較工作區(qū)和暫存區(qū)的差異
* git diff
取消暫存區(qū)部分文件的更改跟磨?
操作場景如下:
創(chuàng)建了兩個文件, 同時(shí)加入到了暫存區(qū)域攒盈, 發(fā)現(xiàn)還需要修改
soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: index.css
new file: index.js
index.css已經(jīng)加入到暫存區(qū)域了抵拘, 但是還需要修改, 我們先從暫存區(qū)域撤回吧
soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
$ git reset HEAD index.css
執(zhí)行g(shù)it status 查看一下是否退回來了
soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: index.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.css
再比較一下工作區(qū)和暫存區(qū)的差別
soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
$ git diff --cached
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..e69de29