James's Ramblings

Git

Created: December 28, 2024

Common commands

Start a working area:

clone     Clone a repository into a new directory
init      Create an empty Git repository or reinitialize an existing one

Work on the current change:

add       Add file contents to the index
mv        Move or rename a file, a directory, or a symlink
restore   Restore working tree files
rm        Remove files from the working tree and from the index

Examine the history and state:

bisect    Use binary search to find the commit that introduced a bug
diff      Show changes between commits, commit and working tree, etc
grep      Print lines matching a pattern
log       Show commit logs
show      Show various types of objects
status    Show the working tree status

Grow, mark and tweak your common history:

branch    List, create, or delete branches
commit    Record changes to the repository
merge     Join two or more development histories together
rebase    Reapply commits on top of another base tip
reset     Reset current HEAD to the specified state
switch    Switch branches
tag       Create, list, delete or verify a tag object signed with GPG

Collaborate:

fetch     Download objects and refs from another repository
pull      Fetch from and integrate with another repository or a local branch
push      Update remote refs along with associated objects

git diff

Displays both staged and unstaged changes compared to the last commit:

git diff HEAD

Shows changes in your working directory that have not been staged for commit:

git diff

Shows changes that have been staged but not yet committed:

git diff --cached
# OR
git diff --staged

The --stat option shows the number of insertions and deletions in each file:

git diff --stat

Show the difference between two specific commits or branches:

git diff <commit1/branch1> <commit2/branch2>
# OR
git diff <commit1/branch1>..<commit2/branch2>

Triple dots ... can be used to compare two branches:

git diff <branch1>...<branch2>

This will show the changes that are in branch2 but not in branch1.

You can use an external diff tool for a visual view:

git difftool <branch1> <branch2>