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
からフィードバックをどのように取得できますか?
git stash
を使用すると、メッセージを提供できます。生成されたトークンをメッセージとして使用すると、他のgit stashメッセージと競合しないことがわかります。
次に、ポップするかどうかを確認する場合は、git stash list
出力にはトークンが含まれます。もしそうなら、隠し場所をポップします。
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
Linuxでは、git stash list | wc -l
を使用してstashエントリーの数をカウントできます。隠しておくものがなかった場合は、実際のgit stash
の前後で同じものが返されます。 Windowsでこれを使用できるかどうかはわかりません。
あなたはできる git diff
と出力を調べます。何もない場合、stash
には何もありません。その戦略に問題はありますか?