web-dev-qa-db-ja.com

単一のファイルを隠しておく

単一のファイルからの変更だけを隠しておきたい:

git stash save -- just_my_file.txt

ただし、上記は機能しません。代替案はありますか?

108
EoghanM

stash -pはおそらくあなたが望む選択であると思いますが、将来さらに他のもっとトリッキーなことに遭遇した場合に備えて、

Stashは、実際には、ほんの少し複雑なbranchセットの非常に単純な代替手段です。 Stashは、物事をすばやく移動するのに非常に役立ちますが、ブランチを使用すると、それほど頭痛や作業をすることなく、より複雑な物事を達成できます。

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

必要なことを行ってから、後でrebaseおよび/またはmerge tmpbranchを実行します。それは本当にありませんthat stashが許可するよりも注意深い追跡を行う必要がある場合、多くの余分な作業はありません。

124
Wes Hardaker

git stash -pgit add -pに類似)を使用して、対話的に1行をスタッシュできます。

ファイル名は必要ありませんが、次のコマンドで他のファイルをスキップできます。 d 隠したいファイルに到達し、そこにあるすべての変更を隠します a

49

最適なオプションは、このファイル以外のすべてをステージングし、git stash save --keep-indexでインデックスを保持するようにstashに指示し、ステージングされていないファイルをスタッシングすることです。

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

Danが指摘しているように、thefiletostashはスタッシュによってリセットされる唯一のものですが、他のファイルもスタッシュするため、まさに望んでいるものではありません。

18
CharlesB

隠された変更を含むメッセージを指定したくない場合は、二重ダッシュの後にファイル名を渡します。

$ git stash -- filename.ext

追跡されていない/新しいファイルの場合は、最初にステージングする必要があります。

ただし、doメッセージを指定する場合は、Pushを使用します。

git stash Push -m "describe changes to filename.ext" filename.ext

どちらの方法もgitバージョン2.13以降で動作します

15
sealocal

「git stash」を使用するたびに「変更を破棄する」ことを意味する場合(そして、一時的に隠しておくためにgit stashを実際に使用しないでください)、その場合は、

git checkout -- <file>

Git stashは、ブランチを作成したり実行したりするための、より迅速で単純な代替手段であることに注意してください。

11
Devesh