2013-12-14 38 views
1

有沒有辦法以只能詢問未分離更改的方式運行git stash --patch獲取git存儲 - 修補程序忽略我已經添加的更改

從文檔,它看起來像我應該能夠做到像

git stash save --patch --keep-index 

但問我的每一個變化,甚至那些我已經git add

換句話說如果我這樣做

echo "one" > a 
echo "two" > b 
git add . 
git commit -m "foo" 
echo "1" >> a 
echo "2" >> b 
git add a 

我怎麼可以運行git stash --patch讓我只問了一下改變文件b?

回答

1

通過git stash --help進行讀取,根據版本1.7.10,根本無法做到您想要的操作。

--keep-index就是保持索引。例如,讓我們從這種狀態開始:

$ date >> file1 
$ date >> file2 
$ git add file1 
$ git status -s 
M file1 
M file2 

如果你git stash --patch現在並接受所有的變化,你會得到:

$ git status -s 
MM file1 

也就是說,指數被保留(使用--patch時, --keep-index自動開啓)。 git stash解開了分階段的更改,但您可以使用git checkout file1將它們還原,這要歸功於保留了索引。

現在讓我們藏匿返回前的狀態:

$ git stash pop 
$ git checkout file1 
$ git status -s 
M file1 
M file2 

而且我們又藏匿不保持指數:

$ git stash --patch --no-keep-index 
$ git status -s 
$ 

任何一種,不分級的面積沒有變化,指數不見了。

因此,不能,您不能使用git stash --patch來只存儲未分離的更改。如果你並不真的需要交互的選擇變化,那麼你可以你不想git add變化添加,然後做git stash --keep-index(不--patch):

$ git status -s 
M file1 
M file2 
$ git stash --keep-index 
$ git status -s 
M file1 

通知不一致的行爲:沒有不分級這次更改爲file1,與我們儲存--patch時不同。

+0

是的,那個不一致行爲是讓我認爲它會像' - patch'一樣工作的原因 – amindfv

0

這是不可能的,stash總是要檢查你的索引。一個存儲在內部表示爲兩個提交 - 一個記錄工作目錄狀態,第二個記錄索引的狀態,它們是HEAD的子目錄。

但是,如果你想要的是拋開一切不分階段變化,你爲什麼不只是運行git diff > mypatchfile,後來git apply你的補丁文件。

+0

git diff> patchfile'方法可能在git中使用'git stash --keep-index',但是我找不到與'--patch'相同的方法。 – amindfv