「git commit」で変更が保存されないのはなぜですか?


251

私はgit commit -m "message"このようにしました:

> git commit -m "save arezzo files"
# On branch master
# 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:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

しかし、その後、git status同じように変更されたファイルが表示されます。

> git status
# On branch master
# 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:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

何が悪いのですか?


16
git commit -am "save arezzo files"すべての変更を自動的に追加するために使用します(.gitignoreを記述)。あなただけの特定のファイル/ディレクトリを追加することができます:git add file.src
MBX

回答:


400

メッセージが言うように:

コミットに追加された変更はありません(「git add」または「git commit -a」を使用してください)

Gitには「ステージング領域」があり、コミットする前にファイルを追加する必要がありますその説明はこちらで読むことができます


具体的な例として、次のものを使用できます。

git commit -am "save arezzo files"

aフラグの追加に注意してください、次のように書くこともできますgit commit -a -m "message"-どちらも同じことをします)

または、commitに追加するものをより詳細に選択したい場合は、git addコマンドを使用して適切なファイルをステージング領域に追加し、git statusを使用して追加される内容をプレビューします(注意してください)使用されている表現)。

ステージング/ファイルの追加の概念についての詳細を提供するgitドキュメントページで、gitの使用方法に関する一般的なドキュメントとチュートリアルも見つけることができます。


もう1つ知っておくべきことは、対話型のステージングです。これにより、ファイルの一部をステージング領域に追加できるため、3つの異なるコード変更(関連するが異なる機能)を行った場合、対話型モードを使用して、変更し、各パーツを順番に追加/コミットします。このように特定のコミットを小さくすることは役に立ちます。


@PeterBoughtonは、「対話型追加」ではなく「対話型追加」を意味しましたか?
djb

3
いや、私は相互追加を意味しました。
Peter Boughton、2012

2
ローカルリポジトリは、リモートリポジトリにコードをプッシュする前の、一種のステージング領域です。変更をコミットする前に、さらに別の「レイヤー」を追加するのはなぜですか?少し複雑すぎませんか?gitは初めてですが、99,99%の開発者は常にcommit -amを使用していると思います。なぜなら、変更がローカル環境の外に出ないためです。
PawelRoman、2014

2
私はIDEに慣れているので、これに遭遇したと思います。なぜそれが必要なステップなのかは
わかり

49

変更を追加しませんでした。具体的には、

git add filename1 filename2

またはすべての変更を追加します(プロジェクトのルートパスから)

git add .

または、コミット-a中に短縮形を使用します。

git commit -a -m "message".

また、インタラクティブな追加機能を使用することを強くお勧めします。特に、簡単に元に戻せる素敵な小さなコミットを作成しようとしている場合は特にそうです。
JER

40

やったほうがいい:

git commit . -m "save arezzo files"

4
これはOPの質問に対する正しい答えのようです。彼は「追加」するのではなく、変更内容をコミットしたいと考えていました。
VectorVortec 2015

8

Gitソース管理下にある小さなサブプロジェクトを別のプロジェクトにコピーしましたが、.gitフォルダーを削除するのを忘れていました。コミットしようとすると、上記と同じメッセージが表示され、.gitフォルダを削除するまでクリアできませんでした。

少しばかげていますが、コミットされていないフォルダーの下に.gitフォルダーがないことを確認する価値はあります。


7

あなたがしたかもしれない:

git add -u -n

変更して追加するファイルを確認するには(ドライラン:-nオプション)、次に

git add -u

変更されたファイルのみを追加するには


4

この問題は、ファイルが置かgit add .れているサブディレクトリ(いわばリポジトリのホームディレクトリ)のでを実行したときに発生し.gitignoreます。あなたにディレクトリを変更してみて最上位のディレクトリと実行しているgit add .が続きますgit commit -m "my commit message"


4

当たり前のことかもしれませんが...

インデックスに問題がある場合は、git-guiを使用してください。インデックス(ステージング領域)が実際にどのように機能するかが非常によくわかります。

インデックスを理解するのに役立つ別の情報源は、Scott Chaconsの「Getting Git」ページ259以降でした。

ほとんどのドキュメントはそれだけを示したので、私はコマンドラインを使い始めました...

git-guiとgitkを使用すると実際に作業が速くなると思います。たとえば、「git pull」などの悪い習慣を取り除きました...今は常に最初にフェッチします...マージする前に、新しい変更内容を確認してください。


3

これが発生する理由は、Gitによって追跡されている別のフォルダー内に、Gitによって既に追跡されているフォルダーがあるためです。たとえば、プロジェクトがあり、それにサブフォルダーを追加しました。どちらもGitによって追跡されていたので、一方をもう一方の中に入れました。内部の追跡を停止するには、それを見つけて、次のコマンドでGitファイルを削除します。

rm -rf .git

私の場合、WordPressアプリケーションがあり、中に追加したフォルダーはテーマでした。したがって、テーマルートに移動してGitファイルを削除し、プロジェクト全体が親であるWordPressアプリケーションによって追跡されるようにする必要がありました。


1

私の場合より多くのファイルがある場合、プロジェクトのルートフォルダーから追加しようとすると 7000個の画像ファイルがありますが、追加されていませんが、画像フォルダーに移動するとすべて問題ありません。ターゲットフォルダを通過し、弓のようにコマンド

git add .
git commit -am "image uploading"
git push origin master

git push origin masterオブジェクトの列挙:6574、完了。オブジェクトのカウント:100%(6574/6574)、完了。最大4つのスレッドを使用したデルタ圧縮オブジェクトの圧縮:100%(6347/6347)、完了。オブジェクトの書き込み:28%(1850/6569)、142.17 MiB | 414.00 KiB / s


0

commit --amend発行した後でも問題が発生しgit add .、それでも機能しません。いくつかの.vimrcカスタマイズを行ったところ、エディターが正しく機能していなかったことがわかりました。vim正しいコードを返すようにこれらのエラーを修正すると、問題が解決しました。


0

同じエラーメッセージで非常によく似た問題がありました。「変更はコミットのためにステージングされていません」、それでも私が差分を実行すると、違いが表示されます。ついに私はしばらく前にディレクトリのケースを変更したことに気づきました。例。「PostgeSQL」から「postgresql」へ。私が今覚えているように、時々gitは古いケースのディレクトリにファイルを1つか2つ残します。次に、新しいバージョンを新しいケースにコミットします。

したがって、gitはどちらに依存するべきかわかりません。それでそれを解決するために、私はgithubのウェブサイトに行かなければなりませんでした。その後、両方のケースを表示できます。そして、あなたは正しくないcasedディレクトリ内のすべてのファイルを削除する必要があります。正しいバージョンが保存されているか、適切なケースのディレクトリに保存されていることを確認してください。

古いケースディレクトリ内のすべてのファイルを削除すると、そのディレクトリ全体が消えます。次に、コミットを実行します。

この時点で、ローカルコンピューターでプルを実行でき、競合が発生しなくなっているはずです。したがって、再度コミットできます。:)


0

他のgit-Repositoryから複製されたサブフォルダーがある場合は、まず$ .git $ファイルをchild-Repositoryから削除する必要があります。 rm -rf .git その後、親フォルダーに変更してを使用できますgit add -A

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