git add command runs blind, but can be controlled with more fine-grained
precision using the
--patch option. This works great for modified and deleted
files, but untracked files do not show up.
$ echo "Hello, World!" > untracked $ git status --short ?? untracked $ git add --patch No changes.
To remedy this, the
--intent-to-add option can be used. According to
git add‘s behavior to:
Record only the fact that the path will be added later. An entry for the path is placed in the index with no content. This is useful for, among other things, showing the unstaged content of such files with git diff and committing them with git commit -a.
What this means is that after running
git add --intent-to-add, the specified
untracked files will be added to the index, but without content. Now, when
add --patch is run it will show a diff for each previously staged untracked
file with every line as an addition. This gives you a chance to look through the
file, line by line, before staging it. You can even decide not to stage specific
lines by deleting them from the patch using the edit command.
$ echo "Hello, World!" > untracked $ git status --short ?? untracked $ git add --intent-to-add untracked $ git status --short AM untracked $ git add --patch diff --git a/untracked b/untracked index e69de29..8ab686e 100644 --- a/untracked +++ b/untracked @@ -0,0 +1 @@ +Hello, World! Stage this hunk [y,n,q,a,d,/,e,?]?
.gitconfig I alias
add --all --intent-to-add to
ap which means that for most commits, I type:
git aa git ap
& aa & ap