Git - Commit
Table of Contents
About
A commit 1) in git is an object 2) that stores the information about:
- who saved the snapshots,
- when they were saved,
- why they were saved.
- the parent commit
- the commiter
- the author
For each commit, a new snapshots (tree) of the project directory is preserved.
Property
Identifier
SHA
Commit identifier are the hash object calculated on the following inputs:
- the SHA of the all files and directories
- the SHA of all ascendant commit
- the commit message
- the author name/email/timestamp
- the committer name/email/timestamp
Name
To reference a commit by name and not by SHA, named called ref can be used.
HEAD is a special ref that refers to the current branch (ie last commit of the current branch)
Message
The commot message is given with the -m option.
git commit -m "My Commit"
Date
List:
- GIT_AUTHOR_DATE
- GIT_COMMITTER_DATE
# Give a date to the commit
git commit --date='Wed Feb 16 14:00 2037 +0100'
git commit --date='2005-04-07T22:13:13' # Iso
# Change the date of a previous commit
# The -C HEAD is just to bypass editing the commit message
git commit --amend --date='Wed Feb 16 14:00 2037 +0100' -C HEAD
See
Cat file
git cat-file -p fdf4fc3
# where fdf4fc3 is the first characters of the commit hash
tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579
parent xxxx
author Foo <[email protected]> 1243040974 -0700
committer Bar <[email protected]> 1243040974 -0700
First commit
where:
- you can see the tree
- the parent commits if any
- the author
- the committer
- and the message
Tree
The commit tree is the tree of the commit. It's an image of the file system (ie file and directory)
Get the hash of the commit tree
- short hand notation that can be used in any commdn
commitHash^{tree}
# dos: commitHash^^{tree}
For example:
- to print the hash:
git rev-parse commitHash^{tree}
- the list the tree
git ls-tree commitHash^{tree}
List the files in a commit
- With the show command
git show --pretty="" --name-only commitHash
- With the listing of the commit tree
git ls-tree $(git rev-parse commitHash^{tree})
File in a commit
Commit viewer : gitk
gitk the commit viewer
gitk file
gitk --follow file # for rename
Management
Creation
git commit
Visualization
To visualize the type of commit, you can use emoji. See a list of emoji by commit type at Emojis Commit
List
git log --format=fuller
git log --pretty=oneline
Undo
Soft
Undo the last commit without deleting the changed files - Reset
# --soft is the default
git reset --soft HEAD~
Hard
If you accidentally commit on master, it's not hard to fix things up. Assuming you've just made an errant commit on master:
- “Backs up” your commit, creating a topic branch
git branch myNewTopicBranch
- Reset your master branch to the same state as upstream/master
git reset --hard upstream/master
Delete
If you want to your working directory back to the status of upstream, see working directory purge
Diff
Command line
- commits that branch-X has but master doesn't
git log master..branch-X
Options:
- –oneline
- –stat will show the files
DiffTool
git difftool -y origin/master..origin/develop
Checkout
git checkout commit_hash
git checkout 56a4e5c08
You are then in a detached head state.
or
git checkout -b branchName commitHash