個人的には、プライベート (ローカル) ブランチに直行することを好みますが、stash は機能します。stash については、次の 2 つの点に注意してください。
- それらは独自のコミットです。ラベルを除いて、「stash」コミットとブランチまたはタグ ラベルに関連付けられたコミットの間に基本的な違いはありません。(タグ ラベルの形式は
refs/tags/tag-foo
です。ブランチの形式はrefs/tags/branch-foo
です。単一のラベルの付いた stash コミットは、ラベルが付いてrefs/stash
います。もちろん、ブランチ ラベルにも「コミットを追加すると自動的に移動する」機能がありますが、それ以上コミットを追加しない場合は、そこでは決して動かないので、単一のコミットを保存するのと同じように機能します。)
- 隠し場所の「スタック」1は、reflog を使用して実装されます。reflogは期限切れになる可能性があります — デフォルトではほとんどの場合 (30 日または 90 日後) 期限が切れますが、そうで
refs/stash
はありませんが、構成エントリでこれを変更できます — そのため、スタックされた stash コミットも "期限切れ" になる可能性があります (同時に reflog エントリの期限が切れます)。 . (より正確には、それらは「収集可能になります」が、なくなった場合、この区別は役に立ちません。:-))
スタッシュの目的は、何かを短期的に保存することです。リポジトリに遅れて戻ってきて、すべて「ブランチ上の WIP」という名前の隠し場所を見つけた場合、それらを理解しようとするのは楽しいことではありません。
その他の機能/バグ :-)stash
は次のとおりです。
git stash branch
事後に気が変わって、スタッシュをブランチに変えることができます。したがって、「短期間」が問題であることが判明した場合 (今日の午後に修正する予定でしたが、現在は少なくとも 1 か月間延期されています)、結局のところ、スタッシュをブランチに変えることができます。
git stash apply [--index]
現在のブランチに適用された変更を「再作成」するために最善を尽くします。--index
ステージングされた変更とステージングされていない変更の両方を個別に復元しようとします。(ただし、これが不可能な場合もあります。)
git stash pop
stash 参照を自動的に破棄します。git stash pop --index
残念ながら、使用するつもりでその部分を省略した場合でも、これが行われます--index
。を使用すると、状態の一部 (ステージングとステージングなし) が簡単に失われますpop
。を使用apply
し、後でdrop
すべてが元の状態に戻ったことを確認すると、この問題を回避できます。
git stash branch
を意味することに注意してください--index
。新しく作成されたブランチには、ステージングされた変更とステージングされていない変更が、実行したときの状態に復元されますgit stash
。(ブランチは、 を行ったときに行っていたコミットからも分岐しますgit stash
。) 変更をコミットし (git add
必要に応じてさらに -ing するか、2 つの別々のコミットとして、または何でも)、プライベート ブランチを作成したかのように続行します。そもそも。
1stash@{0}
スタックの有効期限が切れる部分は、出力の ,以外のすべてのスタッシュで構成されgit stash list
ます。