Git - Commit

Git - Commit

About

A commit 1) in git is an object 2) that stores the information about:

  • who saved the file system snapshots,
  • when they were saved,
  • why they were saved.
  • the commiter
  • the author
  • the parent commit

It's added in commit log (or log) behind its parent commit.

For each commit, a new snapshots (tree) of the project directory is preserved.

Git Commit Tree Data Model

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 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"

Author and Committer Date

Committer / Author

A commit has a:

See

Cat file

git cat-file -p fdf4fc3
# where fdf4fc3 is the first characters of the commit hash
# for the last commit
git cat-file -p HEAD
tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579
parent xxxx
author Foo <[email protected]> 1243040974 -0700
committer Bar <[email protected]> 1243040974 -0700

First commit

where:

Last commit

Just for the last commit

git cat-file -p HEAD

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

git show --pretty="" --name-only commitHash
git ls-tree $(git rev-parse commitHash^{tree})

File in a commit

git rev-parse commitHash:path/to/file
  • Get the content
git show commitHash:path/to/file

Commit viewer : gitk

gitk the commit viewer

gitk file
gitk --follow file # for rename

Management

Creation

git commit

The commit-tree 3)is a low level command that permits to creates a commit from a tree

echo 'First commit Message' | git commit-tree d8329f
# d8329f is the tree hash

Visualization

To visualize the type of commit, you can use emoji. See a list of emoji by commit type at Emojis Commit

List

What is the Git Log (also known as commit history or commit log) ?

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

Modify

the Last Commit

git commit --amend args

Example:

  • last message
git commit --amend -m "another commit message"
  • the author's date
git commit --amend --date='Wed Feb 16 14:00 2037 +0100' -C HEAD

Delete the last local commit

  • The last commit if not pushed
git reset HEAD~

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

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

Get the number of commit since a period

PERIOD_HOURS=4
git log --oneline --since '$PERIOD_HOURS hour ago' | wc -l

Documentation / Reference





Discover More
Git - Local branch

A local branch is a branch that exists only on your computer. tracking branch There are two types of local branches: non-tracking local branches. They are not associated with any other branch....
Git - Tag

This page is tagging in git Git has the ability to tag specific points in history as being important. Typically this functionality is used to mark release points (v1.0, and so on). Git uses two main...
What is the Git Log (also known as commit history or commit log) ?

The commit log (log or commit hisotry) is a directed acyclique graph of commit. Example of commit log: Each leaf commit is a branch. Each time a commit is performed a node in the log graph is added....



Share this page:
Follow us:
Task Runner