2014-07-01 84 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上使用它。

相关问题