LilyPond Contributor's Guide: 3.4.1 Advanced Git concepts

### 3.4.1 Advanced Git concepts

A bit of Git vocabulary will be explained below. The following is only introductory; for a better understanding of Git concepts, you may wish to read Other Git documentation.

The `git pull origin` command above is just a shortcut for this command:

>     git pull git://git.sv.gnu.org/lilypond.git/ branch:origin/branch

where `branch` is typically `master` or `lilypond/translation`; if you do not know or remember, see Downloading remote branches to remember which commands you issued or which source code you wanted to get.

A commit is a set of changes made to the sources; it also includes the committish of the parent commit, the name and e-mail of the author (the person who wrote the changes), the name and e-mail of the committer (the person who brings these changes into the Git repository), and a commit message.

A committish is the SHA1 checksum of a commit, a number made of 40 hexadecimal digits, which acts as the internal unique identifier for this commit. To refer to a particular revision, don’t use vague references like the (approximative) date, simply copy and paste the committish.

A branch is nothing more than a pointer to a particular commit, which is called the head of the branch; when referring to a branch, one often actually thinks about its head and the ancestor commits of the head.

Now we will explain the two last commands you used to get the source code from Git—see Downloading individual branches.

>     git remote add -ft branch -m branch \
>       origin git://git.sv.gnu.org/lilypond.git/

>     git checkout -b branch origin/branch

The `git remote` has created a branch called `origin/branch` in your local Git repository. As this branch is a copy of the remote branch web from git.sv.gnu.org LilyPond repository, it is called a remote branch, and is meant to track the changes on the branch from git.sv.gnu.org: it will be updated every time you run `git pull origin` or `git fetch origin`.

The `git checkout` command has created a branch named `branch`. At the beginning, this branch is identical to `origin/branch`, but it will differ as soon as you make changes, e.g. adding newly translated pages or editing some documentation or code source file. Whenever you pull, you merge the changes from `origin/branch` and `branch` since the last pulling. If you do not have push (i.e. “write”) access on git.sv.gnu.org, your `branch` will always differ from `origin/branch`. In this case, remember that other people working like you with the remote branch `branch` of git://git.sv.gnu.org/lilypond.git/ (called `origin/branch` on your local repository) know nothing about your own `branch`: this means that whenever you use a committish or make a patch, others expect you to take the latest commit of `origin/branch` as a reference.

Finally, please remember to read the man page of every Git command you will find in this manual in case you want to discover alternate methods or just understand how it works.

#### LilyPond — Contributor’s Guide