Git - Commits Revisited

Commit In Detail

Improve the previous commit:

git commit --amend

this will add any changes in the index to the commit you just made. Additionally you may edit the commit message.

Change the author and/or email address of your last commit (if you e.g. accidentally used the wrong email address)

# change your .gitconfig file, set a new name and email:
git config --global "New Username"
git config --global
git commit --amend --reset-author
# or give the new username and email address on the command line:
git commit --amend --author="New Username <>"

Interactive Patch Mode

To just add portions (patches) of a modified file you could use the following command:

commit add -p file

This will split the current file into hunks if you want and enters interactive mode. Your options are:

y yes, use hunk
n no, don't use hunk
q quit, don't use the current or any following hunk
a use the current and all remaining hunks
s split, try to split the current hunk into more pieces
e edit the current hunk


Restore files from a former commit:

git checkout [-f] <reference> -- <glob>
# -f will overwrite files
# reference is your sha-reference
# glob can be a directory (files will be overwritten)
git checkout -- myfile
# replace all changes you made to myfile with the version stored in HEAD of the current branch
git checkout ab987765 -- myfile
# replace myfile with an older version than HEAD
git show ab987765:myfile
# show the contents of an older version of myfile


Undo a change you made

git revert ab987765
# undo the given commit WITHOUT deleting it. A new commit will be created 
# which will revert what you did before.


This should only be done for local changes!

# using --soft will keep your changes
git reset --soft HEAD^
# using --hard will throw away the changes you made
git reset --hard HEAD^


If you cluttered your working directory with untracked files git clean comes to the rescue:

# dry run, with directories (-d)
git clean -nd
# force a run:
git clean -f
# remove directories too:
git clean -fd
# remove git submodules, too
git clean -ffd

Be careful: theres no way back!

Detached HEAD

A detached HEAD points directly to a commit - instead of pointing to it through a branch. So there is no reference to this commit - it will be unreachable via normal refs.

To solve that problem, go through the following steps:

# assumption: you are currently on the detached head
git branch temp
git checkout temp
# this will attach the detached head to the new branch temp
# optionally you might want to examine your current commit with the 
# branch you thought you were working on
git diff master temp
git diff origin/master temp
# if everything is as expected, point the master branch to it:
git branch -f master temp
git checkout master
# get rid of the temp branch:
git branch -d temp
# fixed :)

Show Log of Commits Which Modified a Given File

# show plain log
git log -- path/to/file
# add diff
git log -p -- path/to/file
howto/git/commits_revisited.txt · Last modified: 2017-11 by tb
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 ipv6 ready