I have two concise questions:
Track all of your files with git add
. Commit all of the changes you want to commit and push to remote. Then stash your new file with git stash
. Your file will be tracked but not committed.
So in your example you would start by un-staging fileA. Then run git add README.md
and git add composer.lock
. git commit -m "Committing fun stuff."
. Now we need to track the new file without staging it so we simply do git add fileA
followed by git stash
. When you're ready to commit fileA you can run git stash pop
to commit/push to remote.
Update (May 2015)
I tried to use
git add -N <expr>
but it tracks the file and add it for commit:
That is no longer the case with the upcoming Git 2.5 (Q2 2015).
See "File doesn′t get into the commit after using git add -N"
Original answer (March 2013)
How I can unstage files for commit without untracking them ?
this is the official way:
git reset HEAD fileA
But since it is a new file, you would untrack it as well (remove it from the index, without any previous commit referencing it).
Starting tracking a file means having it in a index (stage) or a commit.
I would recommend making a branch for those files, in order to add them/commit them there.
See "What is Tracked files and Untracked files in the context of GIT?"
- Tracked files are files that were in the last snapshot; they can be unmodified, modified, or staged.
- Untracked files are everything else — any files in your working directory that were not in your last snapshot and are not in your staging area (index)
That means that, for a new file, unstaged it means untrack it.
(Source: Pro Git Book, 2.2 Git Basics - Recording Changes to the Repository)
(Thank you, louisfischer, for the update/fix in the comments)
See also "git - how to tell if a file is git tracked (by shell exit code)?".