web-dev-qa-db-ja.com

Gitの作業ディレクトリに変更を保持しながら、変更を隠します

ありますか git stash変更を隠しますが、作業ディレクトリにも保存しますか?したがって、基本的にgit stash; git stash applyワンステップで?

115
Michael Dorst

価値があるものとして、これを行う別の方法は、保持したい変更をステージングし、--keep-indexを使用してすべてを隠します:

$ git add modified-file.txt
$ git stash save --keep-index

上記のコマンドはmodified-file.txtを含むすべてを隠しますが、そのファイルをステージングして作業ディレクトリに残します。

git stashの公式Linux Kernel Gitドキュメント から:

--keep-indexオプションを使用すると、インデックスに既に追加されているすべての変更はそのまま残ります。

117
user456814

git stash その後 git stash applygit stash && git stash apply)はファイルをスタッシュし、その直後にスタッシュを適用します。結局のところ、stashと作業ディレクトリに変更を加えることができます。

必要に応じてエイリアスを作成できます。このようなものを~/.gitconfig

[alias]
    sta = "!git stash && git stash apply"

このアプローチの欠点は、すべてのファイルが隠されて再作成されることです。これは、問題のファイルのタイムスタンプが変更されることを意味します。 (ファイルを保存しようとすると、git sta、およびmakeまたは友人を使用している場合は、不必要な再構築を引き起こす可能性があります。)

44
madhead

実際に使用する可能性がある回答の小さな拡張。

$ git add modified-file.txt  
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"
10

あなたを助けるかもしれないトリックがあります、隠れるものではなく、FWIW:

git add -A
git commit -m "this is what's called stashing"       (create new stash commit)
git tag stash                               (mark the commit with 'stash' tag)
git reset HEAD~        (Now go back to where you've left with your working dir intact)

そして今、あなたは自由にstashとタグ付けされたコミットを持っているので、git stash popとにかく、そこからパッチの作成やファイルのリセットなどを行うことができますが、作業ディレクトリのファイルもそのまま残されます。

3
KenIchi