1924

ファイルに加えて新しいファイルに変更があり、別のタスクに切り替える間、git stash を使用してそれらを片付けたいと考えています。しかし、git stash 自体は、既存のファイルへの変更のみを隠します。新しいファイルは作業ツリーに残り、今後の作業が雑然とします。この追跡されていないファイルを隠しておくにはどうすればよいですか?

4

18 に答える 18

2709

追跡されていないファイル (特に にあるファイル) を含む作業ディレクトリを隠しておくには、.gitignoreおそらく次のコマンドを使用する必要があります。

git stash --include-untracked

-uまたは、 の代わりに短縮形を使用する--include-untrackedか、単に追跡されていないファイルや無視されたgit stash --allファイルを含むすべてのファイルを隠します。この動作は 2018 年に変更されたため、git が最新であることを確認してください。


警告: 無視されたディレクトリの内容が完全に削除される可能性がある (またはあった) 状況があるようです。詳細については、このアーカイブされた Web サイトを参照してください

于 2009-05-07T16:02:50.870 に答える
462

git 1.7.7 の時点で、オプション (または省略形)git stashを受け入れます。追跡されていないファイルを stash に含めるには、次のコマンドのいずれかを使用します。--include-untracked-u

git stash --include-untracked
# or
git stash -u

警告、これを行うと、gitignore ファイルにdirectory/ エントリがある場合、ファイルが完全に削除されます。*

于 2011-07-25T15:49:41.130 に答える
98

ファイルをインデックスに追加します。

git add path/to/untracked-file
git stash

インデックスの内容全体と、既存のファイルへのステージングされていない変更はすべて、隠し場所になります。

于 2009-05-07T15:57:37.187 に答える
69

git bash では、追跡されていないファイルのスタッシュは、コマンドを使用して実現されます。

git stash --include-untracked
# or
git stash -u

http://git-scm.com/docs/git-stash

git stash は、追跡されていない、またはコミットされていないファイルをワークスペースから削除します。また、次のコマンドを使用して git stash を元に戻すことができます

git stash pop

これにより、ファイルがローカル ワークスペースに戻されます。

私の経験

.classpath および .project ファイルがリモート リポジトリに移動しないように、gitIgnore ファイルを変更する必要がありました。現在、この変更された .gitIgnore をリモート リポジトリに移動することは許可されていません。

.classpath および .project ファイルは、私の Java エディターである Eclipse にとって重要です。

まず、残りのファイルを選択的に追加し、ステージングをコミットしました。ただし、変更された .gitIgnore フィールドと追跡されていないファイルがない限り、最終的なプッシュを実行することはできません。.project と .classpath は隠しません。

使った

git stash

変更された .gitIgnore ファイルを隠します。

.classpath と .project ファイルをスタッシュするために、私は使用しました

git stash --include-untracked

そして、ワークスペースからファイルを削除しました。これらのファイルがないと、Eclipse で自分の作業場所で作業する能力が失われます。コミットされたファイルをリモートにプッシュする手順を完了しました。これが成功したら、私は使用しました

git stash pop

これにより、同じファイルがワークスペースに貼り付けられました。これにより、Eclipse で同じプロジェクトに取り組むことができるようになりました。これが誤解を払拭することを願っています。

于 2014-08-28T20:46:07.573 に答える
29

git バージョン 2.8.1 の場合: 次のように動作します。

変更されたファイルと追跡されていないファイルを名前なしでスタッシュに保存するには

git stash save -u

変更されたファイルと追跡されていないファイルを stash に名前を付けて保存するには

git stash save -u <name_of_stash>

次のようにpopまたはapply later を使用できます。

git stash pop

git stash apply stash@{0}
于 2018-02-20T09:23:22.510 に答える
20

他の場所で言われているように、答えは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コマンド (so, 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。1。おそらくこれ (上記の 2 番目のエイリアスの代わりに) [スクロールせずに収まるように空白が削除されました。読みやすくするために再追加]:popapply

function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}

: この形式では、スタッシュ識別子を指定する場合は、アクション引数と識別子を指定する必要がありますunstashall apply stash@{1}unstashall pop stash@{1}

.zshrcもちろん、長期的に存在させるためにあなたまたは同等のものを入れます。

うまくいけば、この回答が誰かの役に立ち、すべてを 1 つの回答にまとめることができます。

于 2011-02-06T02:00:20.527 に答える
1

これは、ファイルのすべての内容をステージング領域にコミットするのではなく、ファイルが存在することを 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
于 2009-10-11T10:10:22.037 に答える
1

ここにはいくつかの正解がありますが、新しいディレクトリ全体で'git add 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がスタッシュしている唯一のパスである場合、スタッシュの「一時スタッシュ」は空のスタッシュになります。正しい方法は、ディレクトリ名だけでなく、パス全体を追加することです (つまり、パスを '/' で終了します):

git add untracked-path/
git stash "temp stash"
于 2014-08-19T23:59:24.300 に答える
1

追跡されていないファイルをどのように隠しますか?

git stash --include-untracked
于 2021-01-07T06:24:57.240 に答える
-7

私は同じ機能を熟考し、望んでいました。しかし、時間が経つにつれて、それは本当に必要ではないことに気付きました。スタッシュするときは、新しいファイルを残しても問題ありません。それらに「悪い」ことは何も起こりません(他の何かをチェックアウトすると、gitはエラーになり、既存の追跡されていないファイルを上書きしません)

通常、git stashと の間の時間枠git stash popはかなり短いため、追跡されていないファイルが再びすぐに必要になります。したがってgit status、何か他の作業をしているときに ( と の間でgit stash)ファイルが表示されるgit stash pop不便さは、その作業によって引き起こされる不便さよりも小さく、追跡されていないファイルをあなたの隠し場所。

于 2011-02-18T09:12:14.030 に答える