追跡されていないファイルのみを追加する


168

Gitで非常に役立つコマンドの1つは、 git add -u追跡されていないファイルを除くすべてをインデックスにスローすることです。それの逆はありますか?過去数か月の間に、インタラクティブにインデックスに更新を追加し、コミットする前にすべての追跡されていないファイルをそのインデックスに追加したいと思っていました。

追跡されていないファイルのみを個別に識別せずにインデックスに追加する方法はありますか?ヘルプドキュメントに明らかなものは何もありませんが、見当たらないのでしょうか。

ありがとう。


1
「インデックスにスローすべてが、人跡未踏のファイル」については、.gitignore具体的には、その目的のために設計されていませんgit add -u
Pacerier、2015年

また、あなたはすべての現在追跡のものを除去しながら、人跡未踏のファイルを追加するために求めている、またはあなたが追跡されていないファイルを追加するために求めている上に、現在追跡されたもの(すべてを追跡すること)の?
Pacerier、2015年

回答:


236

で簡単git add -iです。入力a(「人跡未踏の追加」のため)、そして*、その後、(「すべて」のために)q(終了する)と、あなたは完了です。

単一のコマンドでそれを行うには: echo -e "a\n*\nq\n"|git add -i


4
インタラクティブではない、まあまあなものがあるといいのですが、ファイル単位よりも確かに優れています。:-)
Rob Wilkerson

34
echo -e "a\n*\nq\n"|git add -i
マット

@Matありがとう、完全なコマンドです----> git add -ia * q ??
BKSpurgeon

Argument list too long...とても近い!
Simeon、

1
私にとってgit 2.21.0は、追跡されていないものを追加することでしたがgit add -i、その後すべてを終了することでした4*q
Harry B

36

git ls-files -o --exclude-standard 追跡されていないファイルを与えるので、以下のようなことができます(またはそれにエイリアスを追加します):

git add $(git ls-files -o --exclude-standard)

1
エイリアスgau = "git ls-files -o --exclude-standard | xargs -i git add '{}'"が機能する
Stephan

gitのLS-ファイルは非常に有用である読み取り--help: -o, --others Show other (i.e. untracked) files in the output
ジョシュアKunzmann

15

正確にあなたが探しているものではありませんが、これは非常に役に立ちました:

git add -AN

すべてのファイルをインデックスに追加しますが、コンテンツはありません。追跡されなかったファイルは、追跡されたかのように動作するようになりました。それらのコンテンツはに表示されgit diff、を使用してインタラクティブに追加できますgit add -p


これはまさに私が探していたものです- git commit -p新しいファイルをウォークスルーすることもできます。
nitsujri

11

これを〜/ .gitconfigファイルに追加できます:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

次に、コマンドラインから次のコマンドを実行します。

git add-untracked

このアプローチは好きですが、ファイル名のスペースは扱いません。
Paul Coccoli

9

人々はgit ls-filesto の出力をパイプすることを提案しましたgit addが、空白などのファイル名やのようなグロブ文字が含まれている場合、これは失敗します*

安全な方法は以下を使用することです:

git ls-files -o --exclude-standard -z | xargs -0 git add

where -zはgitに\0行末記号を使用するように-0指示し、xargsにも同じように指示します。このアプローチの唯一の欠点は、-0オプションが非標準であるため、一部のバージョンのみがxargsサポートすることです。


6

git ls-files現在のディレクトリ内のファイルを一覧表示します。ツリーのどこからでも追跡されていないファイルを一覧表示したい場合は、これでうまくいくでしょう:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

ツリー内のすべての追跡されていないファイルを追加するには:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add

6

私はこれを試してみましたがうまくいきました:

git stash && git add . && git stash pop

git stash変更されたすべての追跡ファイルを個別のスタックに入れるだけで、残りのファイルは追跡されないファイルになります。次に、git add .必要に応じて、すべてのファイルの追跡されていないファイルをステージングします。最終的に、次のようにして、変更されたすべてのファイルをスタックから取り戻すgit stash pop


0

何千もの追跡されていないファイルがある場合(うわー、質問しないでください)、git add -iを追加しても機能しません*。次のエラーが表示されますArgument list too long

次に、Windowsを使用していて(#2に質問しないでください:-)、すべての追跡されていないファイルを追加するためにPowerShellを使用する必要がある場合は、次のコマンドを使用できます。

git ls-files -o --exclude-standard | select | foreach { git add $_ }

より凝縮されたバージョン:git ls-files -o --exclude-standard | % { git add $_ }
marckassay 2018

0

ここには良いヒントがたくさんありますが、Powershell内では動作しませんでした。

私は.NET開発者であり、.Netコアとクロスプラットフォームをあまり使用していないため、主にWindows OSを使用しています。したがって、Gitでの日常の使用はWindows環境で行われ、使用されるシェルはPowershellであることが多いです。 Git bashではありません。

次の手順に従って、追跡されていないファイルをGitリポジトリに追加するためのエイリアス関数を作成できます。

Powershellの$ profileファイル内(欠落している場合-次を実行できます:New-Item $ Profile)

メモ帳$ Profile

次に、このPowershellメソッドを追加します。

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

$ profileファイルを保存して、Powershellに再読み込みします。次に$ profileファイルを次のようにリロードします。$ profile

これは、* nix環境のIMHOのsourceコマンドに似ています。

したがって、次回、Gitリポジトリに対してWindowsでPowershellを使用している開発者が、追跡されていないファイルのみを含めたい場合は、次のように実行できます。

AddUntracked-Git

これは、動詞-名詞があるPowershell規則に従います。


0

git add。(このディレクトリ内のすべてのファイルを追加)

git add -all (すべてのディレクトリのすべてのファイルを追加します)

git add -Nは、後で使用するものをリストするのに役立ちます。


git add -u追跡されていない変更済みファイルを追加します
Tarasovych '16

-3

すべての追跡されていないファイルを追加するには、gitコマンドは

git add -A

また、利用可能なさまざまなオプションの詳細を取得したい場合は、コマンドを入力できます

git add -i

最初のコマンドの代わりに、これを使用すると、以下に示すようにすべての追跡されていないファイルを追加するオプションを含む、より多くのオプションを取得できます。

$ git add -i警告:LFはREADME.txtでCRLFに置き換えられます。ファイルの元の行末は作業ディレクトリになります。警告:LFはpackage.jsonでCRLFに置き換えられます。

*コマンド* 1:ステータス2:更新3:復帰4:追跡されていない追加5:パッチ6:差分7:終了8:ヘルプ今すぐ>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.