2013-12-23 27 views
2

據我所知,Git不能通過名稱/消息來刪除存儲(儘管它可以通過名稱使用git存儲「name」來保存它)。然而,我真的很喜歡這個選項,我想爲我的工作流創建一個「組合別名」(特別是對那些不熟悉git並且應該尊重工作流程的同事)Git根據名稱/消息刪除存儲

我知道我可以創建一個bash腳本我自己,但我想也許有人已經做出了這樣的腳本!?所以,我可以刪除名字藏匿...

我的「更新」的別名大致是這樣的:

git stash save -u "tempstash" 
git fetch origin 
[apply our workflow/update strategy] 
git stash pop --index (should be: git stash delete "tempstash") 

與當前別名的問題是,如果沒有什麼藏匿,它會恢復一箇舊的藏匿處。

另一種選擇是檢查是否需要存儲,但我總是想要一個名稱爲git的存儲刪除選項,這就是爲什麼im問這個問題。 PS:即時通訊使用posh-git,但bash命令應該在一個別名內工作。

感謝

+0

FWIW,在你的例子中的''「tempstash」'不是名稱,它是一條消息(如日誌消息)。 – jszakmeister

回答

1

一個解決辦法是將搜索git reflog stash[email protected]{<number>}格式使用藏匿的名稱作爲regexp和獲得它的名字。

然後,您可以在git中創建一個別名,以將其用作命令。 一個快速和骯髒的解決方案,可以大大提高,是這樣的:

[alias] 
    sshow = "!f() { git stash show `git reflog stash | egrep $* | awk '{printf $2}' | sed 's/://' `; }; f" 
    ssdrop = "!f() { git stash drop `git reflog stash | egrep $* | awk '{printf $2}' | sed 's/://' `; }; f" 

通過加入這個兩個別名您.git/config你可以看到在藏匿修改的文件有:

git sshow <regexp matching the name of the stash> 

你可以用下面的方式刪除存儲:

git ssdrop <regexp matching the name of the stash> 
+0

我喜歡這個主意,但正如你所說的那樣,應該改進,因爲當沒有匹配時,它只是挑選最後一個藏匿,這顯然是危險的 – GerjanOnline

2

你可以通過檢查是否有任何先存放的東西來克服這個問題。您可以使用的方法之一來檢查索引是否髒了在Checking for a dirty index or untracked files with Git

例如建議該命令將不輸出任何東西如果沒有改變藏匿:

git status --porcelain 

使用此命令,該腳本可能是這樣的:

is_stashing=$(git status --porcelain) 
test -n "$is_stashing" && git stash save -u 
git fetch origin 
[apply our workflow/update strategy] 
test -n "$is_stashing" && git stash pop --index 
+0

我怎樣才能把它放在一個別名? – GerjanOnline