Gitを効果的に(そして意図したとおりに)使用するために、小さなアトミックコミットを作成しますが、変更するセッションは1つだけではありません。したがって、私はgit add -p
を多用しています。ただし、後で忘れてしまう傾向があるため、これは完全に新しいファイルに対しては機能しません。
私がやりたいことは、git
にis新しいファイル、追跡したいがステージングしないであることを伝えます。
例: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
があり、git add foo
と言うと、Aセクションに移動します。 git add -N foo
と言うと、AとBの両方に行きます。しかし、それは、少なくとも新しいファイルがあるという事実として、次のコミットに含まれることを意味します。
それをセクションBだけに入れて、後でgit add -p
またはgit add foo
(または何でも)を使用してAに追加できるようにします。
add -N
ソリューションに関しては、これは機能しません。add -N
と言った後にコミットしようとすると、-notが適切に追加した場合、gitはそれを知らないため、文句を言います。空のファイルを処理する方法:
foo: not added yet
error: Error building trees
Git 2.5では、git add -N/--intent-to-add
が実際に適切なソリューションです。
新しいファイルは次のコミットの一部にはなりません。
NguyễnTháiNgọcDuyによる commit d95d728 を参照してください( pclouds
)( d0c69226 にマージ):
diff-lib.c
:diffのi-t-aエントリの位置を調整します
「
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
」が「to be committed
」と報告しても、「status
」は含まれません。
このパッチは出力を次のように変更します
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
」はそれらを新しいものとして表示する必要があります。 +まだインデックスに追加されていないファイル。
おそらく、追跡されていないファイルがある場合に警告する、事前コミットフックを作成してみてください。ただし、これを行うにはgitディレクトリを常にクリーンな状態に保つ必要があります(もちろん、最新の.gitignoreを維持する必要があります)。
また、git add -i
と似ていますが、新しいファイルを追加するためのインターフェースも備えたgit add -p
を試してください。
変更を加える前に、そのパスを持つ空のファイルをコミットできます。すでにそこに物事を書き込んでいる場合は、ファイルを移動して空のファイルを作成し、それをコミットしてから、通常どおり-pを追加し、git commit --amend
したがって、「空のファイルを追加」するコミットはありません。