あるファイルへの変更と新しいファイルがあり、別の作業に移る間に git stash を使ってそれらを隠しておきたいと考えています。 しかし、git stash は既存のファイルの変更点だけを隠し、新しいファイルは作業ツリーに残ったままなので、今後の作業の邪魔になってしまいます。 この追跡されていないファイルをどうやって隠したらいいのでしょうか?
作業ディレクトリにトラックされていないファイル (特に .gitignore に入っているファイル) を隠しておきたい場合は、このコマンドを使うとよいでしょう。
git stash --include-untracked`。
2018年5月17日更新:
新しいバージョンのgitには、トラックされていないファイルや無視されたファイルを含むすべてのファイルをスタッシュするgit stash --all
が追加されました。
git stash --include-untracked`では、無視されたファイルに触れなくなりました(git 2.16.2でテスト済み)。
**オリジナルの回答は以下の通りです。
*[警告: この操作を行うと、gitignore ファイルにディレクトリ/ エントリがある場合は、ファイルが永久に削除されます]1**。
バージョン1.7.7では、git stash --include-untracked
またはgit stash save -u
を使うと、トラックされていないファイルをステージングせずに隠しておくことができます。
ファイルを追加(git add
)して、トラッキングを開始します。その後、隠します。ファイルの内容全体が新しいものなので、stashされ、必要に応じて操作することができるようになります。
これは、ファイルの内容をすべてステージングエリアにコミットしてから git stash
を呼び出すのではなく、ファイルが存在することを git に伝えることで解決できるのではないかと思いました。Araqnid descriptionには,前者の方法が書かれています.
git add --intent-to-add path/to/untracked-file
または
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
しかし、後者ではうまくいきません。
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state