When I want to split up a new file into several commits I can git add -N <file>
and then interactively stage lines using git gui
. When I make a mistake while staging, however, git gui
won't let me unstage individual lines because it is a new file (which seems like a bug to me). Of course I can always unstage the whole file and start over again, but I am wondering whether there is a more efficient way to do so.
I am using git 1.7.5
.
To clarify, this question is specific to new aka untracked files!
From the command line type:
This will let you selectivelty unstage hunks from the index using the standard command-line interface for managing hunks.. This is the opposite of
git add -p
.UPDATE
OK, it would appear that you cannot selectively stage different hunks when the file is new. Given that git-gui and the standard git hunk editor both do not allow this, it probably isn't possible.
I just ran into the same issue: I had just committed a new file, and I wanted to unstage some of the lines in that file and have those as a separate commit. The solution I worked out was:
git commit -m 'REVERTME'
git revert HEAD
git rebase -i
tofixup
the first new commit, and optionallyreword
the revert commit.Using
fugitive
you can easily do so. Just invoke the:Gdiff
command and then stage and unstage whatever you want. You can even edit the index file directly. Of course, this solution requires you to be fairly comfortable withvim
andvimdiff
...Another easy way to sort this is to cut everything out of the file except for one line that you want in the first commit. Stage it and then add back the rest of the file. From then on you can stage hunks/lines as usual