'git reset HEAD^'
followed by 'git commit --amend'
.
Caveats: Don't modify your commits if they've been pushed upstream or shared (unless you know why and how and ... no, just don't).
git reset HEAD^ -- $file
git commit --amend
Notes:
- This technique works nicely if you need to modify a previous commit by wrapping it inside a
'git rebase -i ...'
and then 'edit'ing the commit you want. - My right-hand prompt shows the VCS system (git), branch and git status. zsh's
vcs_info
is AWESOME. - Yes, I do have a smiley face in my prompt. It goes from a green happy face to a red sad face if the last command failed.
Short Example:
% git add a b c
% git commit -m "adds a and c"
# realize I didn't mean to include b!
% git reset HEAD^ -- b
% git commit --amend
Full Example:
[vm53@vm53]% git status :) (git)-[master] ~/src/bar
# On branch master
nothing to commit (working directory clean)
[vm53@vm53]% echo "a" > a; echo "b">b; echo "c">c :) (git)-[master] ~/src/bar
[vm53@vm53]% git status :) (git)-[master] ~/src/bar
# On branch master
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# a
# b
# c
nothing added to commit but untracked files present (use "git add" to track)
[vm53@vm53]% git add a b c :) (git)-[master] ~/src/bar
[vm53@vm53]% git commit :) (git)-[master] ~/src/bar
### editor opens with the old git message, modify if desired
[master 18d73bd] adds a and c
3 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 a
create mode 100644 b
create mode 100644 c
[vm53@vm53]% git status :) (git)-[master] ~/src/bar
# On branch master
nothing to commit (working directory clean)
[vm53@vm53]% git reset HEAD^ -- b :) (git)-[master] ~/src/bar
[vm53@vm53]% git status :) (git)-[master] ~/src/bar
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# deleted: b
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# b
[vm53@vm53]% git commit --amend -m "adds a and c" :) (git)-[master] ~/src/bar
[master c15220b] adds a and c
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 a
create mode 100644 c
[vm53@vm53]% git status :) (git)-[master] ~/src/bar
# On branch master
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# b
nothing added to commit but untracked files present (use "git add" to track)
[vm53@vm53]% :) (git)-[master] ~/src/bar
5 comments:
Exactly what I was looking for. Thanks buddy!!!
Exactly what I was looking for. Many many Thanks!!
Exactly what I was looking for. Many many Thanks!!
Exactly what I was looking for. Many many Thanks!!
Thanks — I couldn't believe how easy that was! That use of git reset makes perfect sense now you mention it.
Post a Comment