私はブランチに行き、いくつかの仕事をしました。別のブランチに行きたかったのですが、コミットしたくなかったので、git stash
を実行しました。それからgit checkout <otherbranch>
をしました。そこでいくつかの作業を行いました。最初のブランチと同じように、作業をコミットする前に切り替えたくなりました。そこで私もgit stash
をしました。最初のブランチに切り替えて、その特定のブランチからスタッシュを取得すると考えて、それをアンスタッシュ(git stash pop
)しようとしました。 <otherbranch>
(最新の隠し場所)から隠し場所が隠されたことに驚きました。 stashはブランチ固有であるという印象を受けましたが、この動作はローカルリポジトリ全体に対して1つのスタッシュしかないことを示しています。
git stash
ブランチ固有ですか、それともリポジトリ全体ですか?リポジトリ全体の場合、オプションを渡してブランチ固有にすることはできますか?
現在のスタッシュスタックを表示するには:
git stash list
スタックから特定のスタッシュを選択するには、上記のstash@{number}
で参照します。
動作をブランチごとにしたい場合は、ブランチでコミット(または複数のコミット)を行うことができます。後からいつでもコミットを「アンメイク」できます(たとえば、git reset
、--soft
または--mixed
のいずれかで、 git reset documentation ;またはwith git rebase -i
は、一時的なデータを破棄しつつ、最終的な「実際の」コミットのみを保持します)。
(実際にgit stash
をエミュレートするには、少なくとも2つのコミットが必要です。1つはインデックス状態用、もう1つはワークツリー状態用です。ただし、インデックス状態を保存および復元する予定がない場合は、git add -A
ワークツリー全体の状態を一時コミットに入れます。または、git stash
はシェルスクリプトであるため、デフォルトでブランチごとに動作するように簡単にコピーおよび変更できます。たとえば、リポジトリ全体の単一のグローバルrefs/pb-stash/branch
ではなく、refs/stash
が作業ネームスペースとして使用されます。明示的に名前を付けることで、あるブランチから別のブランチにスタッシュを持ち込むことができます。
いいえ、いいえ。gitstashはリポジトリごとです。
ここ は、使用方法に関する素晴らしいページです。
git stash
はブランチごとではありません。
git stash
の代わりに(たくさんの隠し場所やブランチがあると簡単に失われる可能性があります)git commit
を実行することをお勧めします。コードを完成する準備ができたら、未完成のコードを取り戻すためにgit reset ${COMMIT_HASH_VALUE}
を実行しますgit commit
およびgit reset
を使用するとtogetherは特定のブランチのgit stash
を正しくシミュレートできますcommit
およびreset
コマンドの値と使用法を示す一般的な実際のシナリオを次に示します。
git commit
を実行できます。COMMIT_HASH_VALUE
を書き留めますgit reset ${COMMIT_HASH_VALUE}
を実行する(FYI git reset
のデフォルトは--mixed
です)