質問
って変更されるファイルは、プラスファイルを保存し、新規ファイル、使いたいと思うgitを隠たちに見てもらうとともに、がんに乗り換えです。がgitを隠し、自stashesのみの変更は、既存のファイルの新しいファイルに残った木clutteringしても最後まで突き詰めます。方法を隠す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 1.7.7以降、 git stash
は-include-untracked
オプション(または省略形の -u
)を受け入れます。追跡されていないファイルをスタッシュに含めるには、次のコマンドのいずれかを使用します。
git stash --include-untracked
git stash -u
警告、これを行うと、gitignoreファイルにdirectory / *エントリがある場合、ファイルが完全に削除されます。
ファイルをインデックスに追加します:
git add path/to/untracked-file
git stash
インデックスのコンテンツ全体と、既存のファイルへのステージングされていない変更はすべて、それをスタッシュにします。
にロードstashingのuntrackedファイルを使用するコマンド
git stash --include-untracked
または
git stash -u
http://git-scm.com/docs/git-stash
gitを隠すべて削除しまuntrackedはuncommitedファイルからスペースが活用できます。ときに戻すには、gitを隠を用い、以下のコマンド
git stash pop
このファイルのバックカスペースが活用できます。
私の経験
があったのを修正は私のgitIgnoreファイルを避ける運動です。classpathます。プロジェクトファイルをリモート呼ぶ。私は移動できないことを修正しました。gitIgnoreでリモートレポ-レートしています。
.classpathます。プロジェクトファイルは重要な食は私のjava編集者。
初めてのすべてに選択的に添付のファイルやコミッ際しかし、最終的に押しなければなりませんのを修正しました。gitIgnore fielsのuntrackedファイルを顧..プロジェクト。classpathはstashed.
使用した
git stash
のためのstashingのを修正しました。gitIgnoreファイルです。
のためのstashing.classpathます。プロジェクトファイルを使って
git stash --include-untracked
そのファイルからスペースが活用できます。なのこれらのファイルを取り去り私の能力に取り組んで仕事をする場所にはeclipse.いの方の手続きの為のファイル。このことを確認し、
git stash pop
この貼り付け、同じファイルも含まれます。このた中心部に位置する力が同時に作業プロジェクトにはeclipse.これはブラシ以外の誤解.
他のところで述べたように、答えはファイルを 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'
pop
が必要ない場合に、パラメータを git stash
に提供できるようにするため、後者はシェルスクリプトまたは関数として優れている場合があることに注意してください。 apply
、および/または単にトップスタッシュを取得するのではなく、特定のスタッシュを指定できるようにしたい。おそらくこれ(上記の2番目のエイリアスの代わりに)[スクロールせずに収まるように空白を削除しました。読みやすくするために追加し直してください]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
注 :このフォームでは、スタッシュ識別子を指定する場合は、アクション引数と識別子を指定する必要があります。 unstashall適用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 save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}
最後のものは追跡されたファイルのスタッシュをポップし、追跡されていないファイルのみをスタッシュのままにします。
追跡されていないファイルを隠しておき、インデックス付きファイル(たとえば、コミットしようとしているファイル)を保持する場合は、 -kに
-k
(インデックスを保持)オプションを追加しますu
git stash -u -k
次のコマンドで簡単に実行できます
git stash save --include-untracked
または
git stash save -u
git stashの詳細この投稿にアクセス(ここをクリック)
新しい、追跡されていないファイルが&quot; views.json&quot;と呼ばれるとします。アプリの状態を隠してブランチを変更する場合は、通常次のように入力します。
git add views.json
その後:
git stash
そしてそれは隠されます。その後、ブランチを変更することができます
git checkout other-nice-branch
ここにはいくつか正しい答えがありますが、新しいディレクトリ全体では、 'git add path'
は NOT になります。作業。そのため、 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
また、 untracked-path がスタッシングする唯一のパスである場合、スタッシュ&quot; temp stash&quot;空の隠し場所になります。正しい方法は、ディレクトリ名だけでなく、パス全体を追加することです(つまり、パスの末尾に「/」を付けます):
git add untracked-path/
git stash "temp stash"
これは、ファイルのすべての内容をステージング領域にコミットしてから git stash
を呼び出すのではなく、ファイルが存在することをgitに伝えることで解決できると思いました。 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
以前は同じ機能を熟考し、望んでいました。 しかし、時間が経つにつれて、私はそれが本当に必要ないことに気付きました。 隠しておくと、新しいファイルを残してかまいません。何も「悪い」ことはありませんそれらに起こる可能性があります(他の何かをチェックアウトすると、gitはエラーとなり、既存の追跡されていないファイルを上書きしません)
そして、通常、 git stash
と git stash pop
の間の時間枠はかなり短いため、追跡されていないファイルをすぐに再度必要とするでしょう。
そのため、他の作業中( git stash
と git stash pop <の間)にファイルが
git status
で表示されるのは不便です/ code>)は作業によって生じる不便さよりも小さく、それ以外の場合は追跡されていないファイルをスタッシュに追加しようとするとコストがかかります。