2015-02-11 28 views
0

下面的命令更改工作目錄,也是階段:如何將以下2個git命令拼接成一個?

git checkout <commit> <file>

下面的命令不接觸的工作目錄,它只會改變階段:

git reset <commit> <file>

我想只改變工作目錄,但不想觸摸舞臺。我可以用下面的命令來做到這一點:

git checkout <commit> <file> 
git reset <file> 

我怎麼用一個命令做到這一點?

+0

您可以在bash函數內部組合命令,允許將參數傳遞給它。在我的簡單測試中,它不像我想象的那樣,但是在你的別名配置中應該是一個好開始: undo =「!f(){git checkout $ 1 $ 2 && git reset $ 2;}; f 「 – 2015-02-11 08:58:54

+0

在這種情況下,我寧願喜歡我的版本...不存在一個單一的git命令呢? – user3719454 2015-02-11 09:10:05

+0

* stage *是什麼意思?索引? – 2015-02-11 09:14:56

回答

2

最正確的答案是「你不能」。有兩個簡單的變通辦法雖然(當然,首先是比第二個簡單的,第二個是那種說「可以」):

  • 使用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程序或其他某種形式。

+0

第一個解決方法是確定的,但不是「明確的混帳」,第二個......我不明白它:)謝謝你,儘管 – user3719454 2015-02-11 09:38:13

+0

我的假設是'GIT_INDEX_FILE'被git用來確定索引的位置?這很不好。我喜歡。 – 2015-02-11 09:59:01

+0

@Zeeker:是的,默認設置是'$ GIT_DIR/index',其中'$ GIT_DIR'本身默認爲,無論你的git目錄在哪裏。 :-) – torek 2015-02-11 10:00:18

相關問題