gitは変更された変更のみを追加し、追跡されていないファイルを無視します


658

私は「git status」を実行し、以下にリストされているのは、「commitにはステージングされていない変更」という見出しで変更されたファイルです。また、無視したい追跡されていないファイルもいくつかリストしました(これらのディレクトリに「.gitignore」ファイルがあります)。

変更したファイルをステージングに入れて、コミットできるようにしたい。「git add。」を実行すると、変更されたファイルと、無視したいファイルがステージングに追加されました。

以下のgitステータスが表示された場合、変更されたファイルのみを追加し、追跡されていないファイルを無視するにはどうすればよいですか。

また、「。gitignore」ファイルは正しく機能していますか?

$ git status
# On branch addLocation
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   someProject/path/domain/viewer/LocationDO.java
#       modified:   someProject/path/service/ld/LdService.java
#       modified:   someProject/path/service/ld/LdServiceImpl.java
#       modified:   someProject/path/web/jsf/viewer/LocationFormAction.java
#       modified:   someProject/war/WEB-INF/classes/message/viewer/viewer.properties
#       modified:   someProject/war/page/viewer/searchForm.xhtml
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .metadata/
#       someProject/build/
no changes added to commit (use "git add" and/or "git commit -a")

1
ファイルを追跡した後に.gitignoreファイルを追加した場合、.gitignoreファイルはすでに追跡されているファイルを無視しません。それが問題になる可能性があります。
BKSpurgeon 2016年

回答:


904

理想的に.gitignoreは、追跡されていない(および無視された)ファイルがステータスで表示されたり、その他を使用して追加されたりするのを防ぐgit add必要があります。.gitignore

あなたは行うことができgit add -u、それが修正され、削除されたファイルをステージングするように。

git commit -a変更および削除されたファイルのみをコミットすることもできます。

2.0より前のバージョンのGitを使用していたgit add .場合は、使用する必要があることに注意してgit add -u .ください(git add -A」と「git add .」の違いを参照)。


74
興味深いことに、この(add -u)はファイルだけを 追加するのはなく、modifiedファイルを「追加」しdeletedます。私が現在防止しようとしているものです。
Zach Lysobey 2013年

6
変更されたファイルのみを追加するには、通常、リポジトリの最上位ディレクトリに移動し、と入力しfor fil in $(git diff --name-only --relative); do git add $fil; doneます。頻繁に使用する場合(使用しない場合)、~/.bashrcファイルのエイリアスを作成します。もちろん、これはbashでのみ機能します。
Krøllebølle

8
明確な答えはなく、「ほとんどの人にとって機能する」答えだけですか?これを正しく行うには別のプロセスを使用する必要がありますか?これはどのようにgit addに組み込まれていないのですか?やりたいことはそんなにありふれたことのようです。
Samuel

2
nbこれらのコメントで言及されているメソッドは、奇妙なファイル名(スペース、アスタリスクなど)があると失敗します。適切に任意の奇妙な名前のファイルが、使用をエスケープするには:IFS=$(echo -en "\n\b"); for file in $(git diff --name-only); do git add "$file"; done
Orwellophile

3
git add -u略であるgit add --updategit commit -aの略ですgit commit --all
ヒューゴ

96

これは私のために働きました:

#!/bin/bash

git add `git status | grep modified | sed 's/\(.*modified:\s*\)//'`

またはさらに良い:

$ git ls-files --modified | xargs git add

グループを再利用しない場合は、グループ化(())は必要ありません。\ sを使用すると、ファイル名の前に空白が残ります。この場合の最終結果に影響するわけではありませんが、例を設定するために使用したsedコマンドは、sed 's /.* modified:* //'です。Mac OS X 10.9.5で検証済み。
Samuel

式をテストするときは、@ Samuelグループ化が便利です。次に、角かっこ内に一致を印刷して、自分が正しいことを確認できます。
user877329

1
@Ярославソリューションは変更されたファイルと追跡されていないファイルを追加しgit add -u、に等しいので、質問には答えません。
Nick Volynkin、2015

7
--modifiedには、削除されただけでなく変更されたものも含まれているようです
DMart

2
git diff-files -z --diff-filter = M --name-only | xargs -0 git add --dry-runはうまく機能しているようです。
DMart 2015

10
git commit -a -m "message"

-a:現在の変更/削除されたすべてのファイルをこのコミットに含めます。ただし、追跡されていない(新しい)ファイルは含まれないことに注意してください。

-m:コミットのメッセージを設定します


4

現在のは何であるかは言いませんでした.gitignoreが、.gitignoreルートディレクトリに次のコンテンツが含まれているとうまくいくはずです。

.metadata
build

3
私は自分の.gitignoreをすべて間違って使用していました。私はすべてのディレクトリに空の.gitignoreファイルがあり、その中身を1つのgitignoreに含めるのではなく、無視したいと考えていました。
スティーブ

1
@Steve:これは、それぞれの場合に機能します。gitognore開始が含まれていました(すべてを無視)。ただし、.gitignore最上位のディレクトリにある1つを使用するほうが、通常ははるかに簡単で十分です。
maaartinus 14年

2

私はたまたまこれを試しましたので、最初にファイルのリストを見ることができました:

git status | grep "modified:" | awk '{print "git add  " $2}' > file.sh

cat ./file.sh

実行:

chmod a+x file.sh
./file.sh 

編集:(コメントを参照)これは1つのステップで実現できます。

git status | grep "modified:" | awk '{print $2}' | xargs git add && git status

1
これは、1つのステップで達成することができますgit status | grep modified | awk '{print $2}' | xargs git add && git status
Choylton B. Higginbottom

ええ、私はその解決策も提供すべきだったので、ありがとう、私は投稿を更新しました。
Mike Q

1

これが機能なのかバグなのかはわかりませんが、これでうまくいきました。

git commit '' -m "Message"

空のファイルリスト ''に注意してください。Gitはこれを解釈して、ステージングされていない場合でも、変更された追跡ファイルをすべてコミットし、追跡されていないファイルを無視します。


--amendを使用する場合、これは間違いなく機能しませ
GhostCat

1

変更および削除されたファイルをステージングするには

git add -u

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