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


81

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

私は時々間違った枝に間違った隠し場所を適用しました、それは私にこの質問について疑問を残しました。


13
Gitには、コミットされていない変更をブランチ(またはヘッド)に関連付けることができるものがありません。これは、一度に複数のブランチで進行中の作業がある場合に明らかになります。ここでの答えが指摘しているように、stashには、それにもかかわらず、その特性に基づいた有用なアプリケーションがあります。git stash-here誰でも?
ブレイクテイラー

回答:


69

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

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

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

これにより、作業中にプログラミングモードに深く入り込むことができ、コードの適切なライブラリアンシップについて心配する必要がなくなります。その後、精神的な休憩を取るときに、戻って変更をすべての適切な棚に慎重に分類できます。

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


4
私はこれに同意しません:As mentioned, if you want a “per-branch stash,” you really want a new branch forking off from the existing branch.。特に、同じプログラムの2つのバージョンを切り替えることがよくあり、フル実行にmakeは10分かかります。ビルドされたバイナリをブランチごとに格納できると非常に便利です。そして、私は確かに、ログやブランチにバイナリを入れたくありません。
クレメント2015年

どうして?(私はあなたが知っていると思います、あなたはそれを知らないだけです。)
アリストテレスパガルツィス2015年

21

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

参照


ありがとうございました!ブランチにスタッシュを適用できることを私は知りませんでしたが、これは結局のところ動作のようです。あるブランチに隠し場所があるので、別のブランチをチェックして、そこでいくつかの作業を行いました。結局、マスターにリベースする前に、保留中の変更の一部を隠しておく必要がありました。更新された「gitk --all」は、最初の隠し場所を表示しなくなりました。だまされているのではないかと思いました。2番目のブランチでの作業が完了した後、その隠し場所をポップしました。その後、更新した「gitk --all」は元の隠し場所を再び表示しました。
ダニエルミラディノフ2013

17

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

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

これがお役に立てば幸いです。


隠そうとしているものが、たとえば、makeそのブランチで実行された結果のバイナリの束である場合はどうなりますか?(ごとのブランチスタッシュは、あなたがその枝にインクリメンタルビルドを行う時間次の時間を節約するだろうが、あなたは確かにインデックスにバイナリを追加する必要はありません)
クレマン

5

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

たとえば、バグ修正ブランチで簡単な変更を行うことがよくあります。私が取り組んでいる変更が最初に推測したよりも複雑であることに気付くだけです。Git-stashは、その一連の変更を別のブランチに移動する最も簡単な方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.