Chapters ▾ 2nd Edition

A3.4 Git Commands - Branching and Merging

Branching and Merging

There are just a handful of commands that implement most of the branching and merging functionality in Git.

git branch

The git branch command is actually something of a branch management tool. It can list the branches you have, create a new branch, delete branches and rename branches.

Most of Chapter 3 is dedicated to the branch command and it’s used throughout the entire chapter. We first introduce it in “Créer une nouvelle branche” and we go through most of it’s other features (listing and deleting) in “Gestion des branches”.

In “Suivre les branches” we use the git branch -u option to set up a tracking branch.

Finally, we go through some of what it does in the background in “Références Git”.

git checkout

The git checkout command is used to switch branches and check content out into your working directory.

We first encounter the command in “Basculer entre les branches” along with the git branch command.

We see how to use it to start tracking branches with the --track flag in “Suivre les branches”.

We use it to reintroduce file conflicts with --conflict=diff3 in “Examiner les conflits”.

We go into closer detail on it’s relationship with git reset in “Reset démystifié”.

Finally, we go into some implementation detail in “La branche HEAD”.

git merge

The git merge tool is used to merge one or more branches into the branch you have checked out. It will then advance the current branch to the result of the merge.

The git merge command was first introduced in “Branches”. Though it is used in various places in the book, there are very few variations of the merge command — generally just git merge <branch> with the name of the single branch you want to merge in.

We covered how to do a squashed merge (where Git merges the work but pretends like it’s just a new commit without recording the history of the branch you’re merging in) at the very end of “Projet public dupliqué”.

We went over a lot about the merge process and command, including the -Xignore-all-whitespace command and the --abort flag to abort a problem merge in “Fusion avancée”.

We learned how to verify signatures before merging if your project is using GPG signing in “Signer des commits.

Finally, we learned about Subtree merging in “Subtree Merging”.

git mergetool

The git mergetool command simply launches an external merge helper in case you have issues with a merge in Git.

We mention it quickly in “Conflits de fusions (Merge conflicts)” and go into detail on how to implement your own external merge tool in “Outils externes de fusion et de différence”.

git log

The git log command is used to show the reachable recorded history of a project from the most recent commit snapshot backwards. By default it will only show the history of the branch you’re currently on, but can be given different or even multiple heads or branches from which to traverse. It is also often used to show differences between two or more branches at the commit level.

This command is used in nearly every chapter of the book to demonstrate the history of a project.

We introduce the command and cover it in some depth in “Visualiser l’historique des validations”. There we look at the -p and --stat option to get an idea of what was introduced in each commit and the --pretty and --oneline options to view the history more concisely, along with some simple date and author filtering options.

In “Créer une nouvelle branche” we use it with the --decorate option to easily visualize where our branch pointers are located and we also use the --graph option to see what divergent histories look like.

In “Cas d’une petite équipe privé” and “Plages de commits we cover the branchA..branchB syntax to use the git log command to see what commits are unique to a branch relative to another branch. In “Plages de commits we go through this fairly extensively.

In “Journal de fusion” and “Triple point” we cover using the branchA...branchB format and the --left-right syntax to see what is in one branch or the other but not in both. In “Journal de fusion” we also look at how to use the --merge option to help with merge conflict debugging as well as using the --cc option to look at merge commit conflicts in your history.

In ??? we use the --notes= option to display notes inline in the log output, and in “Raccourcis RefLog” we use the -g option to view the Git reflog through this tool instead of doing branch traversal.

In “Recherche” we look at using the -S and -L options to do fairly sophisticated searches for something that happened historically in the code such as seeing the history of a function.

In “Signer des commits we see how to use --show-signature to add a validation string to each commit in the git log output based on if it was validly signed or not.

git stash

The git stash command is used to temporarily store uncomitted work in order to clean out your working directory without having to commit unfinished work on a branch.

This is basically entirely covered in “Remisage et nettoyage”.

git tag

The git tag command is used to give a permanant bookmark to a specific point in the code history. Generally this is used for things like releases.

This command is introduced and covered in detail in “Étiquetage” and we use it in practice in “Étiquetage de vos publications”.

We also cover how to create a GPG signed tag with the -s flag and verify one with the -v flag in “Signer votre travail”.