55

git を効果的に (そして意図したとおりに) 使用するために、小さなアトミック コミットを行いますが、1 つのことだけを変更するよりも長いセッションを行います。したがって、私は を多用しますgit add -p。ただし、これは完全に新しいファイルでは機能しません。後でそれらを忘れる傾向があるためです。

私がやりたいこと、新しいファイルがあることを伝えるgitことです。追跡したいのですが、ステージングは​​しません:

例: 実行するとgit status以下が生成されます。

# On branch my-current-branch
# Your branch is ahead of 'origin/my-current-branch' by 2 commits.
#
# Changes to be committed:
#
<<STAGED SECTION>> // A
#
# 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)
#
<<UNSTAGED-YET-KNOWN SECTION>> // B
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
<<UNKNOWN SECTION>> // C

C セクションにファイルfooがあり、A セクションに移動すると言いgit add fooます。AとBの両方に行くと言ったらgit add -N foo、少なくとも新しいファイルがあるという事実として、それは次のコミットに含まれることを意味します。

git add -p後でor git add foo(または何か)を使用して A に追加できるように、セクション B だけに入れたいと思います。

編集

解決策に関してはadd -N、これは機能しません。言った後にコミットしようとするとadd -N、適切に追加していないため、空のファイルの処理方法がわからないため、git が不平を言うからです。

foo: not added yet
error: Error building trees
4

3 に答える 3

39

Git 2.5 では、git add -N/--intent-to-add実際には適切なソリューションです。
新しいファイルは次のコミットには含まれません。

Nguyễn Thái Ngọc Duy ( )によるコミット d95d728を参照してください ( d0c692263にマージ):pclouds

diff-lib.c: diff の ita エントリの位置を調整します

問題:

" " で追加されたエントリgit add -Nは、ユーザーがコミットする前に追加し忘れないようにするためのリマインダーです。これらのエントリは、実際のものではありませんが、インデックスに表示されます。git statusインデックスにそれらが存在すると、次のような混乱を招く " " が発生します。

On branch master
Changes to be committed:
        new file:   foo

Changes not staged for commit:
        modified:   foo

" "を実行すると、" " は " " として報告されますがgit commit、" foo" は含まれません。statusto be committed

解決:

このパッチは出力を次のように変更します

On branch master
Changes not staged for commit:
        new file:   foo

no changes added to commit

つまり、次のことを意味します。

そのようなパスを「まだインデックスに追加されていませんが、Git は既に知っている」ものとして扱います。" git diff HEAD" と " git diff --cached HEAD" はそれらについて語るべきではなく、" git diff" はそれらを新しいものとして表示する必要があります。+ まだインデックスに追加されていないファイル。

于 2015-05-20T06:34:26.713 に答える
3

追跡されていないファイルがある場合に警告する pre-commit フックを作成してみてください。ただし、これを行うには、常に git ディレクトリをクリーンな状態に保つ必要があります (もちろん、.gitignore を最新の状態に保つ必要があります)。

git add -iに似ていますgit add -pが、新しいファイルを追加するためのインターフェイスも備えています。

于 2012-06-18T18:09:27.413 に答える
1

変更を加える前に、そのパスで空のファイルをコミットできます。そこにすでに何かを書いている場合は、ファイルを移動し、空のファイルを作成し、それをコミットしてから、通常どおり -p を追加するとgit commit --amend、「空のファイルの追加」コミットがなくなります。

于 2012-06-18T16:35:06.620 に答える