天天看點

Git分支進階管理[四]

标簽(linux): git

checkout一個檔案和帶檔案路徑git reset非常像,除了它更改的是工作目錄而不是緩存區。不像送出層面的checkout指令,它不會移動HEAD引用,也就是你不會切換到别的分支上去

如果你緩存并且送出了checkout的檔案,它具備将某個檔案回撤到之前版本的效果。注意它撤銷了這個檔案後面所有的更改,而git revert指令隻撤銷某個特定送出的更改

Git分支進階管理[四]
Git分支進階管理[四]

--soft 緩存區和工作目錄都不會被改變

--mixed 預設選項。緩存區和你指定的送出同步,但工作目錄不受影響

--hard 緩存區和工作目錄都同步到你指定的送出

雖然在調用時加上 --hard選項可以令git reset成為一個危險的指令(譯注:可能導緻工作目錄中所有目前進度丢失!),但本例中工作目錄内的檔案并不會被修改。不加選項地調用git reset并不危險——它隻會修改暫存區域

Git分支進階管理[四]

執行指令後:

Git分支進階管理[四]
Git分支進階管理[四]
Git分支進階管理[四]

當檢測到檔案路徑時,git reset将緩存區同步到你指定的那個送出。比如,下面這個指令會将倒數第二個送出中的foo.py加入到緩存區中,供下一個送出使用。

git reset HEAD~2 foo.py

運作git reset HEAD foo.py 會将目前的foo.py從緩存區中移除出去,而不會影響工作目錄中對foo.py的更改

--soft、 --mixed和--hard對檔案層面的git reset毫無作用,因為緩存區中的檔案一定會變化,而工作目錄中的檔案一定不變。

git reflog指令分析你所有分支的頭指針的日志來查找出你在重寫曆史上可能丢失的送出

指令

作用域

常用情景

git reset

送出層面

版本復原,,在私有分支上舍棄一些沒有送出的更改

檔案層面

将檔案從緩存區中移除

git checkout

切換分支或檢視舊版本

舍棄工作目錄中的更改

git revert

在公共分支上復原更改

(沒有)

Git分支進階管理[四]