web-dev-qa-db-ja.com

特定のファイルをgit stashするにはどうすればいいですか?

可能な重複:
変更された複数のファイルのうち1つのファイルだけを隠す方法 /

保存しようとしている隠しファイルから現在変更されている他のファイルを残して、特定のファイルを隠蔽するにはどうすればよいですか。

例えば、もしgit statusが私にこれを与えるならば:

younker % gst      
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

そして、私はapp/views/cart/welcome.thtmlを隠したいだけなのですが、どうすればいいですか?のようなもの(しかしもちろんこれは動作しません):

git stash save welcome_cart app/views/cart/welcome.thtml
1252
ynkr

編集: git 2.13以降、stashへの特定のパスを保存するコマンドがあります:git stash Push <path>。例えば:

git stash Push -m welcome_cart app/views/cart/welcome.thtml

古い答え:

あなたはgit stash --patch(またはgit stash -p)を使ってそれをすることができます - あなたは変更されたそれぞれの塊と共に表示されるでしょう対話型モードに入ります。隠したくないファイルをスキップするにはnを、隠したいファイルが見つかった場合はyを、残りのハンクを終了して残りの隠しファイルを残しておくにはqを使用します。 aは、表示されているハンクとそのファイル内の残りのハンクを隠します。

最もユーザーフレンドリーなアプローチではありませんが、本当に必要な場合は作業が完了します。

1914
svick

通常私は隠したくないインデックスの変更を追加してから--keep-indexオプションで隠します。

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

最後のステップはオプションですが、通常は必要です。インデックスから変更を削除します。


警告 コメントにあるように、これは段階的でも段階的でもなく、すべてを隠し場所に入れます。 --keep-indexはスタッシュが完了した後にインデックスをそのままにします。後でスタッシュをポップすると、マージの競合が発生する可能性があります。

276
skalee