2013-12-12 10 views
23

ブランチAで作業していて、ブランチAでコミットする準備が整う前に突然ブランチBで作業する必要がある場合、私は変更をA、チェックアウトBに入れ、そこで作業してからチェックアウトし、隠しを適用します。git stashをいつ使うべきですか?

私がAで働いていて、その日の仕事をやめたいなら、私は自分の仕事を隠してから翌日に、私が仕事を再開するときにそれを適用するか、作業ディレクトリ内のファイル。私はなぜこのような場合には、何らかのセキュリティ上の利点がある場合を除いて、stashを使用する必要があるのか​​分かりません。

また、別のシナリオでは、私は職場でも家庭でも働いています。私が家に帰りたいときに私がコミットする準備ができていないなら、私は自分の仕事を隠し、GitHubにプッシュして、自宅で隠し場所を引っ張ってもいいですか?

答えて

31

スタッシュは単なる便利な方法です。ブランチはとても安価でgitで簡単に管理できるので、私は個人的にはほとんど常にスタッシュするよりも新しい一時的なブランチを作成する方が好きですが、ほとんどの場合は味の問題です。

私は私が私の最後のコミットで何かを忘れてしまったし、すでに同じ支店内の次の1の作業を開始している発見した場合スタッシュのような私は一つの場所がある:あなたが持っているときにgit stashをヒットした場合

# Assume the latest commit was already done 
# start working on the next patch, and discovered I was missing something 

# stash away the current mess I made 
git stash save 

# some changes in the working dir 

# and now add them to the last commit: 
git add -u 
git commit --ammend 

# back to work! 
git stash pop 
1

stashコマンドは、最後にコミットしたときの変更を隠します。あなたのケースでは、翌日に作業を続けるつもりなら、隠す必要はありません。私はコミットしたくない変更を元に戻すためにstashを使用します。

+0

いいえ、 'git stash'はブランチを変更しません。特にコミットされた変更を「元に戻す」ことはありません。ファイルのコミットされていない変更は破棄されます(一時的に)。 - それは厄介なように見えるかもしれませんが、これらの種類の単語はgitの文脈では非常に特別な意味を持ちます。あなたは本当にそれらを混ぜ合わせるべきではありません。 – michas

+0

それを指摘してくれてありがとう。それに応じて私の答えを変えました。 – Severin

+0

gitでは、 "ブランチ"は一連のコミットとして定義されています。 'git stash'はコミットには触れないので、ブランチをまったく変更しません。ブランチから何かを "削除"することはありません。ブランチから何かを "リセット"しません。ブランチは同じままですが、作業ツリー内のファイルだけが変更されます。 - それは全く違う2つのことです。 – michas

0

作業コピーの変更(ステージング領域ではない)、gitは隠されたオブジェクトを作成し、ちょうどgit checkout -- .のように、変更を失うことはありません。後で、スタックの一番上からポップできます。

関連する問題