2014-07-01 113 views
12

我有一個Windows命令腳本,用於將dev分支合併到項目分支中。它首先讀取當前分支名稱,存儲更改,獲取併合並開發和項目分支,然後切換回原始分支並彈出存儲。檢查「git stash」是否藏有任何東西

問題是可能沒有任何更改存儲。這將前面的藏匿物留在堆疊頂部。當它到達腳本的末尾並彈出存儲器時,它彈出與當前分支無關的前一個存儲器。

Set SourceBranch=dev 
Set ProjectBranch=project 

:: Stash current changes. 
For /F "tokens=1,2" %%a In ('Git branch -q') Do If "%%a"=="*" Set CurrentBranch=%%b 
Git stash save -u 

:: Pull latest source branch. 
Git checkout %SourceBranch% 
Git pull 
For /F "tokens=1,3" %%a In ('Git branch -q -v') Do If "%%a"=="*" Set MergeHash=%%b 

:: Merge source into project branch. 
Git checkout %ProjectBranch% 
Git pull 
Git merge --commit %MergeHash%||Exit 1 

:: Return to original branch. 
Git checkout %CurrentBranch% 
Git stash pop 

我怎樣才能從Git stashGit status反饋來確定我是否需要彈出藏匿?

回答

13

git stash允許您提供消息。您可以使用生成的令牌作爲消息,以便您知道它不會與其他git存儲消息衝突。

然後,當您要檢查是否彈出時,只需檢查git stash list輸出是否包含您的令牌。如果是這樣,彈出藏匿處。

+1

我喜歡這個答案。這是強大的 –

8
git stash list #get a listing of all stashes to parse 
git stash show -p [email protected]{0} #replace 0 with number of relevant stash from list 
+1

這是如何幫助我確定是否有任何東西被藏起來?如果沒有變化,則不會有任何內容被隱藏,並且以前可能存在任何數量的擋板。 –

+0

grep你感興趣的分支名稱的git存儲列表的輸出。儘管假設你沒有在同一分支中有其他的存儲(你似乎表明你沒有) –

0

您可以git diff並檢查輸出。如果沒有,那麼沒有什麼stash。該策略的任何問題?

0

在Linux上,您可以使用git stash list | wc -l來統計存儲條目的數量。如果沒有什麼東西可以隱藏,那麼在您的實際git stash之前和之後,它會返回相同的結果。我不確定你是否可以在Windows上使用它。

相關問題