web-dev-qa-db-ja.com

git stashがブランチごとに一意ではないのはなぜですか?

変更をあるブランチから次のブランチに移動できると思いますが、それはチェリーピッキングの目的であり、変更をコミットしないのであれば、おそらくそれらを移動するべきではありませんか?

私は時々、間違ったブランチに間違った隠し場所を適用したことがあります。そのため、この質問について疑問に思いました。

77
iros

前述のように、「ブランチごとのスタッシュ」が必要な場合は、既存のブランチから分岐した新しいブランチが本当に必要です。

また、スタッシュを使用すると、作業中のブランチをプルできるという事実に加えて、すべてをコミットする前にswitchブランチを使用できます。これは、通常の意味でのチェリーピッキングではなく、チェリーピッキング作業コピーには役立ちません。

F.ex.、機能ブランチで作業しているときに、そのブランチに関係のないコード内のマイナーなバグや表面的な不純物に気付くことがよくあります。まあ、私はそれらをすぐに修正します。コミットするときは、関連する変更を選択的にコミットしますが、修正や外観はコミットしません。代わりに、それらを隠しておきます。これにより、マイナーフィックスオンステーブルブランチに切り替えることができます。そこで、スタッシュを適用して、各マイナー修正を個別にコミットできます。 (問題の変更に応じて、別の機能ブランチに切り替えるために、それらのうちのいくつかを再び隠しておくthoseを適用する。)

これにより、作業中にプログラミングモードに深く入ることができ、コードの適切な司書について心配する必要がありません。その後、精神的な休憩をとると、戻って自分の変更をすべての適切な棚に注意深く分類できます。

隠し場所がグローバルではなかった場合、このタイプのワークフローははるかに困難になります。

69

Git 1.6以降、次を使用してブランチにスタッシュを適用できるようになりました

git stash branch name_of_new_branch

Gitが新しいブランチを作成し、チェックアウトします!詳細については、

  • Gitブック

  • info git-stashおよびoption = branchで検索します。

スタッシュを使って移動できると思います

git stash branch <branch | new_branch> [<stash>]

あなたの隠し場所のリストを見るには、

git stash list

参考

19
iGbanam

ブランチから実行される「スタッシュ」が必要な場合は、次のようにして、現在のブランチから新しいブランチに変更を保存します。

git checkout -b new_stash
git commit -a -m "stashed changes"

隠し場所を元に戻す

git reset HEAD^
git branch -d new_stash

git stashは、ダーティーツリーに変更をプルできるため、特に優れた編集があり、

git pull

できません。変更を隠して、プルしてから適用することができます

git stash
git pull
git stash apply
git stash clear

これが役に立てば幸い!

17
Patrick_O

git-stashは、まだチェックインされていない変更を、現在チェックアウトされているものとは別のブランチに移動するのに最も役立ちます。

たとえば、私はバグ修正ブランチで簡単な変更をしていることがよくあります。私が取り組んでいる変更は、私が最初に想像したよりも複雑であることがわかりました。 Git-stashは、一連の変更を別のブランチに移動する最も簡単な方法です。

5
jmxz