web-dev-qa-db-ja.com

「git stash」が何かを隠していないか確認してください

devブランチをプロジェクトブランチにマージするように設計されたWindowsコマンドスクリプトがあります。まず、現在のブランチ名を読み取り、変更を隠しておき、devブランチとプロジェクトブランチをフェッチしてマージします。次に、元のブランチに戻り、スタッシュをポップします。

問題は、stashに変更がない可能性があることです。これにより、前のスタッシュがスタックの一番上に残ります。スクリプトの最後に到達してstashをポップすると、現在のブランチとは関係のない前の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 stashまたはGit statusからフィードバックをどのように取得できますか?

28
Hand-E-Food

git stashを使用すると、メッセージを提供できます。生成されたトークンをメッセージとして使用すると、他のgit stashメッセージと競合しないことがわかります。

次に、ポップするかどうかを確認する場合は、git stash list出力にはトークンが含まれます。もしそうなら、隠し場所をポップします。

26
Strikeskids
git stash list #get a listing of all stashes to parse
git stash show -p stash@{0} #replace 0 with number of relevant stash from list
10
Neil Neyman

Linuxでは、git stash list | wc -lを使用してstashエントリーの数をカウントできます。隠しておくものがなかった場合は、実際のgit stashの前後で同じものが返されます。 Windowsでこれを使用できるかどうかはわかりません。

0
franso

あなたはできる git diffと出力を調べます。何もない場合、stashには何もありません。その戦略に問題はありますか?

0
New Alexandria