回答:
追跡されていないファイル(特に.gitignoreにあるファイル)を含む作業ディレクトリを隠しておくには、おそらく次のコマンドを使用します。
git stash --include-untracked
2018年5月17日更新:
gitの新しいバージョンではgit stash --all
、追跡されていないファイルや無視されたファイルを含むすべてのファイルが隠されるようになりました。
git stash --include-untracked
無視されたファイルには触れません(git 2.16.2でテスト済み)。
以下の元の答え:
警告:これを行うと、gitignoreファイルにdirectory / *エントリがある場合、ファイルが完全に削除されます。
バージョン1.7.7以降では、git stash --include-untracked
またはgit stash save -u
を使用して、追跡されていないファイルをステージングせずに隠しておくことができます。
git add
ファイルを追加()し、追跡を開始します。次に隠します。ファイルの内容全体が新しいため、それらは隠され、必要に応じて操作できます。
git stash --include-untracked
前git stash --all
にリストすることを2つの理由で要求するでしょう。まず、2019年にOPの質問により適切に回答します。次に、すべてが.gitignoredされているすべてのファイルを削除するという点で、ほとんどすべてのユーザーがおそらく望まないことを行うためです
git 1.7.7以降git stash
、--include-untracked
オプション(または省略形)を受け入れます-u
。追跡されていないファイルをスタッシュに含めるには、次のいずれかのコマンドを使用します。
git stash --include-untracked
git stash -u
警告:これを行うと、gitignoreファイルにdirectory / *エントリがある場合、ファイルが完全に削除されます。
.gitignore
ものがこのように見えても、追跡されてignoredDirectory
いないignoredDirectory/*
ものは削除されます。追跡されていないファイルでも、ディレクトリだけではありません。
*.extension
エントリにも適用されますか?
git
1.8.3 -u
(--include-untracked
)オプションはgit stash show
、追跡されていないファイルを
ファイルをインデックスに追加します。
git add path/to/untracked-file
git stash
インデックスのコンテンツ全体と、既存のファイルへのステージングされていない変更により、すべてが隠されます。
git add .
何らかの理由でそれを考慮に入れていなかった
git bashでは、追跡されていないファイルを隠しておくには、次のコマンドを使用します。
git stash --include-untracked
または
git stash -u
http://git-scm.com/docs/git-stash
git stashは、追跡されていないファイルやコミットされていないファイルをワークスペースから削除します。また、次のコマンドを使用してgit stashを元に戻すことができます
git stash pop
これにより、ファイルがローカルワークスペースに戻ります。
私の経験
.classpathファイルと.projectファイルがリモートリポジトリに移動しないように、gitIgnoreファイルを変更する必要がありました。現在、この変更された.gitIgnoreをリモートリポジトリに移動することは許可されていません。
.classpathおよび.projectファイルはEclipseにとって重要です-これは私のJavaエディターです。
まず、残りのファイルを選択的に追加し、ステージングにコミットしました。ただし、変更された.gitIgnoreフィールドと追跡されていないファイルが表示されない限り、最終的なプッシュは実行できません。.projectと.classpathは隠されていません。
使った
git stash
変更された.gitIgnoreファイルを隠しておくため。
.classpathと.projectファイルを隠しておくために、私は
git stash --include-untracked
そして、それは私のワークスペースからファイルを削除しました。これらのファイルがないと、Eclipseで私の作業場所で作業する私の能力を奪います。コミットされたファイルをリモートにプッシュする手順の完了に進みました。これがうまくいったら、私は
git stash pop
これにより、同じファイルがワークスペースに貼り付けられました。これにより、同じプロジェクトでEclipseで作業する能力が戻ってきました。これが誤解を無視することを願っています。
~/.gitignore
。
他で述べられているように、答えはgit add
ファイルです。例えば:
git add path/to/untracked-file
git stash
ただし、別の回答でも質問が出されます。ファイルを本当に追加したくない場合はどうなりますか?まあ、私が知る限り、あなたはそうしなければなりません。そして、以下は機能しません:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
これは次のように失敗します。
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
それで、あなたは何ができますか?さて、あなたは、本当にファイルを追加する必要がありますしかし、あなたが効果的で、後でそれをアン追加することができますgit rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
その後、以前と同じ状態でgit add
(つまり、と呼ばれるpath/to/untracked-file
追跡されていないファイルと、追跡されているファイルに必要なその他の変更を加えて)作業を続けることができます。
これに関するワークフローの別の可能性は、次のようなものです。
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
[注:@mancocapacからのコメントで述べたように--exclude-standard
、git ls-files
コマンドに追加することもできます(そう、git ls-files -o --exclude-standard
)。]
...簡単にスクリプト化することもできます-エイリアスでも可能です(zsh構文で示されます。必要に応じて調整します)[また、この回答でスクロールせずに画面に収まるようにファイル名を短くしました。選択した別のファイル名に置き換えてください]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
注後者はよりよいシェルスクリプトや関数などであるかもしれないことを、パラメータを供給できるようにしgit stash
たくない場合には、pop
しかしapply
、および/または特定のスタッシュを指定するだけではなく、トップを取ることができるようにしたいです1。おそらくこれ(上記の2番目のエイリアスの代わりに)[スクロールせずに収まるように空白が削除されます。読みやすくするために再度追加します]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
注:このフォームでは、stash識別子を指定する場合は、アクション引数と識別子を指定する必要があります。例:unstashall apply stash@{1}
またはunstashall pop stash@{1}
もちろん、あなた.zshrc
が長期的に存在させるためにあなたがあなたの同等のものに入れたものはどれですか。
うまくいけば、この答えが誰かに役立ち、すべてを1つの答えにまとめることができます。
gitバージョン2.8.1の場合:次のように動作します。
変更されたファイルと追跡されていないファイルを名前なしでstashに保存するには
git stash save -u
変更されたファイルと追跡されていないファイルを名前を付けてstashに保存するには
git stash save -u <name_of_stash>
次のように、ポップまたは後で適用することができます。
git stash pop
git stash apply stash@{0}
git stash show
それらを示さなかった。を試したところgit stash apply
、「エラー:追跡されていないファイルをstashから復元できませんでした」というエラーが発生しました。ただし、ファイルは再び追跡されていないものとしてリストされましたが、追跡されたファイルへの変更は復元されませんでした。これらのファイルはスタッシュからチェックアウトすることで個別に復元できると思いますが、この解決策は私が望んでいたものではありませんでした。
次のようにすることで、追跡されていないファイルだけを隠しておくことができました。
git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}
最後のものは、追跡されたファイルのスタッシュをポップし、追跡されていないファイルのみをスタッシュしたままにします。
git stash save -u
untracked
ファイルを保存するだけでなく、tracked
との両方を保存しますuntracked
。この場合、あなたがしている最初の保存は必要ありません。atlassian.com/git/tutorials/saving-changes/…に
あなたは単に以下のコマンドでそれを行うことができます
git stash save --include-untracked
または
git stash save -u
git stashの詳細については、この投稿にアクセスしてください(ここをクリック)
ここにはいくつかの正解がありますが、新しいディレクトリ全体で'git add path'
は機能しないことを指摘しておきます。したがって、untracked-pathに新しいファイルがたくさんある場合は、次のようにします。
git add untracked-path
git stash "temp stash"
これにより、次のメッセージが表示されます。
Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty
場合と人跡未踏-pathは、あなたがしているスタッシュパスのみで、スタッシュ「一時スタッシュは、」空のスタッシュになります。正しい方法は、ディレクトリ名だけでなく、パス全体を追加することです(つまり、パスの最後に「/」を付けます)。
git add untracked-path/
git stash "temp stash"
これは、ファイルのすべての内容をステージング領域にコミットするのではなく、ファイルが存在することをgitに伝えてを呼び出すことで解決できると思いましたgit stash
。Araqnid は前者の方法を説明しています。
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
新しく作成されたファイルでSourcetreeを使用しているときに同様の問題が発生しました(それらはスタッシュにも含まれません)。
私が最初に「すべてをステージング」を選択してから、新しく追加されたコンポーネントを追跡する場所に隠し、したがって隠し場所に含めました。
私はよく考えて同じ機能を望んでいました。しかし、時間が経つにつれ、本当に必要ないことに気付きました。隠しておくときは、新しいファイルを残してもかまいません。それらに「悪い」ことは起こり得ません(他のものをチェックアウトすると、gitはエラーになり、既存の追跡されていないファイルを上書きしません)
また、通常、git stash
との間の時間枠git stash pop
はかなり短いので、追跡されていないファイルが再び必要になります。私は、ファイルの不便がで現れて言うように、git status
あなたは(間に他の何かに取り組んでいる間、git stash
およびgit stash pop
小さい)、その後の作業に起因すると注意が必要な不便さは、それ以外に追跡されていないファイルを追加しようとするかかるだろうあなたの隠し場所。
git stash show
何も返されず、削除したくなります(数か月前に書いた有用なスクリプトが含まれているときに行ったように)。 → ドロップされたスタッシュを回復する方法)