下面的命令更改工作目錄,也是階段:如何將以下2個git命令拼接成一個?
git checkout <commit> <file>
下面的命令不接觸的工作目錄,它只會改變階段:
git reset <commit> <file>
我想只改變工作目錄,但不想觸摸舞臺。我可以用下面的命令來做到這一點:
git checkout <commit> <file>
git reset <file>
我怎麼用一個命令做到這一點?
下面的命令更改工作目錄,也是階段:如何將以下2個git命令拼接成一個?
git checkout <commit> <file>
下面的命令不接觸的工作目錄,它只會改變階段:
git reset <commit> <file>
我想只改變工作目錄,但不想觸摸舞臺。我可以用下面的命令來做到這一點:
git checkout <commit> <file>
git reset <file>
我怎麼用一個命令做到這一點?
最正確的答案是「你不能」。有兩個簡單的變通辦法雖然(當然,首先是比第二個簡單的,第二個是那種說「可以」):
使用git show
,如git show HEAD~3:path/to/foo.txt > path/to/foo.txt
的這裏的缺點是,除了必須兩次寫入文件名/路徑之外,show
命令不應用任何塗抹過濾器。如果你沒有有任何塗抹過濾器,這沒什麼大不了的。
您可以git checkout
所以在選擇不同的「索引文件」(分段區域)多數民衆贊成感動的舞臺是不是您將用於下一階段提交:
GIT_INDEX_FILE=/tmp/dummy git checkout <commit> <path>
的這裏的缺點是這有點笨拙,你應該記得清理你的虛擬索引文件(假暫存區)。另外,上面假定shell(sh/bash)語法;您可能需要在其他shell中使用env
程序或其他某種形式。
第一個解決方法是確定的,但不是「明確的混帳」,第二個......我不明白它:)謝謝你,儘管 – user3719454 2015-02-11 09:38:13
我的假設是'GIT_INDEX_FILE'被git用來確定索引的位置?這很不好。我喜歡。 – 2015-02-11 09:59:01
@Zeeker:是的,默認設置是'$ GIT_DIR/index',其中'$ GIT_DIR'本身默認爲,無論你的git目錄在哪裏。 :-) – torek 2015-02-11 10:00:18
您可以在bash函數內部組合命令,允許將參數傳遞給它。在我的簡單測試中,它不像我想象的那樣,但是在你的別名配置中應該是一個好開始: undo =「!f(){git checkout $ 1 $ 2 && git reset $ 2;}; f 「 – 2015-02-11 08:58:54
在這種情況下,我寧願喜歡我的版本...不存在一個單一的git命令呢? – user3719454 2015-02-11 09:10:05
* stage *是什麼意思?索引? – 2015-02-11 09:14:56