rm
( not git rm
)を使って4つのファイルを削除したGitリポジトリがあり、Gitのステータスは次のようになります。
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
このように各ファイルを手作業で追加しなくても、Gitからこれらのファイルを削除する方法を教えてください。
git rm file1 file2 file3 file4
可能であれば、git add .
と同じように機能するものを探しています。
$ git add -u
これはgitに追跡ファイルを自動的にステージングするように伝えます - 以前に追跡されたファイルの削除も含みます。
作業ツリー全体をステージングするには:
$ git add -u :/
現在のパスだけをステージングするには:
$ git add -u .
git ls-files --deleted -z | xargs -0 git rm
あなたが探しているものかもしれません..それは私のために動作します..
あなたが使用することができます
git add -u
削除したファイルをステージング領域に追加してからコミットする
git commit -m "Deleted files manually"
あなたが単に実行した場合:
git add -u
gitはあなたが削除したファイルが実際に次のコミットの一部であるべきであることを知るためにそのインデックスを更新します。それから、その変更をチェックインするために "git commit"を実行することができます。
または、あなたが実行した場合:
git commit -a
それは自動的にこれらの変更を(そしてその他の変更も)反映してコミットします。
更新 :削除したファイルだけを追加したい場合は、
git ls-files --deleted -z | xargs -0 git rm
git commit
あなたはおそらく-Aを探しています:
git add -A
これはgit add -uに似ていますが、新しいファイルも追加します。これは、hgのaddremove
コマンドとほぼ同等です(ただし、移動検出は自動です)。
ステージングするには削除された ファイルのみ
for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done
または(xargsの方法)
git status | awk '/deleted/ {print $2}' | xargs git rm
後で使うのに便利なように、 alias 好みのコマンドセットを設定できます。
git rm test.txt
実際のファイルを削除する前後に。
'--all'または '--update'オプションを指定してgit-addを使用すると、必要以上の効果が得られる可能性があります。新しいファイルや変更されたファイルもインデックスに追加されます。他のファイルに触れずにgitから削除されたファイルを削除したいときのためのbashエイリアス設定があります。
alias grma='git ls-files --deleted -z | xargs -0 git rm'
ファイルシステムから削除されたすべてのファイルは、削除済みとしてインデックスに追加されます。
それが本当に重要であるというわけではありませんが、私は選んだ答えに同意しません。
git add -u
...作業ツリーの対応するファイルが削除されている場合、インデックスからファイルを削除しますが、追跡されたファイルの変更された新しい内容もステージングします。
git rm $(git ls-files --deleted)
...一方では、追跡された削除されたファイルだけをRMします。
だから私の見解では後者が良い選択肢です。
それらが唯一の変更であるならば、あなたは単にすることができます
git commit -a
すべての変更をコミットします。それは削除されたファイルを含みます。
git ls-files --deleted | xargs git rm
削除されたファイルのみを追加するのに最適なオプションです。
これは他のいくつかのオプションです。
git add . => Add all (tracked and modified)/new files in the working tree.
git add -u => Add all modified/removed files which are tracked.
git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.
git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
git add -u
-u --update作業ツリーではなく、インデックス内のすでに追跡されているファイルに対してのみ一致します。つまり、新しいファイルはステージングされませんが、追跡対象ファイルの変更された新しい内容がステージングされ、作業ツリー内の対応するファイルが削除された場合はインデックスからファイルが削除されます。
Noが与えられた場合、デフォルトは "。"です。つまり、現在のディレクトリとそのサブディレクトリ内のすべての追跡ファイルを更新します。
その簡単な解決策は私にはうまくいきます:
git rm $(git ls-files --deleted)
あなたがそれをあなたの.gitconfig
に追加したいならば、これをしてください:
[alias]
rma = !git ls-files --deleted -z | xargs -0 git rm
それからあなたがしなければならないのは走ることだけです:
git rma
git ls-files --deleted -z | xargs -0 git rm --cached
これにより、gitによって以前追跡されたすべての削除済みファイルが削除され、ファイル名にスペースが含まれている場合も処理されます。
あなたのPOSIXの変種によっては、xargs -0 -r
を使う必要があるかもしれません:これは、nullコンテンツをパイプで送るとxargs
を適切に終了させるでしょう。
編集:--cached
および--deleted
フラグは、すでに削除されていないファイルを誤って削除しないようにするために、並行して使用されます。
実際に実行されているコマンドを確認するには-t
を使用してください。
私はちょうど同じことをするためにVirenderの答えを微調整しました:
git ls-files --deleted -z | xargs -t -0 git rm
それを試してみてください。
-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.
git add . && git commit -m -a "Your commit"
または
git add --all && git commit -m "Your commit"
述べたように
git add -u
削除のために削除されたファイルをステージングしますが、更新のためにファイルを修正しました。
変更したファイルをアンステージングするには
git reset HEAD <path>
コミットを整理して清潔に保ちたい場合。
注: 削除されたファイルもステージング解除される可能性があるため、これらのワイルドカードには注意してください。
Git-addのフラグはどれも削除されたファイルをステージングするだけではありません。あなたが変更したものがすべて削除されたファイルであるなら、それで大丈夫です、さもなければ、あなたはgit-statusを実行しそして出力を解析する必要があります。
ジェレミーの答えを元にして、これは私が得たものです:
git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
grep -v
行を追加しなければならないかもしれません。git rm
に渡します。これをシェルエイリアスに貼り付ける...
処理するファイルがたくさんある場合でも、次のように動作します。
git ls-files --deleted | xargs git rm
あなたはおそらくコメントもコミットしたくなるでしょう。
詳細は、 便利なGitスクリプト を参照してください。
git commit -m 'commit msg' $(git ls-files --deleted)
私はすでにファイルを削除した後、これは私のために働きました。
私は同じものが必要で、git guiの "stage changed"ボタンを使いました。それはまたすべてを追加します。
そして「ステージが変わった」後に「コミット」しました….
だから私の作業ディレクトリはまたきれいです。
削除したファイルのみをステージングするためにgit add -u <filenames>
を使用できます。
たとえば、ファイルtemplates/*.tpl
を削除した場合は、git add -u templates/*.tpl
を使用します。
-u
は、リポジトリには存在するが作業ディレクトリには存在しなくなったファイルを参照するために必要です。それ以外の場合、デフォルトのgit add
は作業ディレクトリ内のファイルを探すことです。そこで削除したファイルを指定してもそれらは見つかりません。
何かのようなもの
git status | sed -s "s/^.*deleted: //" | xargs git rm
それをするかもしれません。
(さらに別のバリエーション)
他のフォルダはそのまま残して、私はディスクファイルから1つの特定のフォルダからすでに削除されたすべてを削除したいと思いました。以下は私のために働いた:
git ls-files --deleted | grep <folder-name> | xargs git rm
削除されたファイルをステージングするためのシステムエイリアスをコマンドrm-all
として追加する
UNIXのalias rm-all='git rm $(git ls-files --deleted)'
ウィンドウdoskey rm-all=bash -c "git rm $(git ls-files --deleted)"
注意
Windowsにはbash
がインストールされている必要があります。
git rm $(git ls-files -d)
git ls-files
コマンドによってリストされたすべてのファイルを削除します(-dは削除されたファイルのみを表示します)。ファイル名またはパスにスペースが含まれているファイルでは機能しませんが、覚えやすいです
ビジュアルスタジオプロジェクト用
'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm'
削除されたファイルパスにスペースがある場合に便利です。