More Version Control with Git
- Understand branches.
We use the name branch to keep the same notation of set theory since the Git history is a tree. Unfortunately the term branch could be better understood if we think of thumbtack that has a name.
We can add and remove thumbtack on a tree as we like. We can do this with Git and we will learn how soon.
If our thumbtack is on a leaf of the tree and the tree grows our thumbtack will change its position. Git has this same behaviour.
We can get the name of the thumbtacks on our Git repository with
$ git branch --all
* master remotes/origin/HEAD -> origin/master remotes/origin/master
*, marks the thumbtacks that has the files that we are using now.
If we want to get where the thumbtacks are on our Git tree we can use
$ git lga
* 3f3c1bf (HEAD -> master, origin/master, origin/HEAD) Add words * 22dcdb5 Add words * 92808ea Add words |\ | * 5121eef Add words * | ee40506 Add words |\ \ | |/ |/| | * 51bd45c Add words | * ee87332 Add words * | 87db327 Add words |/ * cde9009 Add Python \o/ * 23c6a6b Add words * 6318870 Begin
So, the thumbtacks
remotes/origin/master are on the commit
en.dic doesn’t have the word
abduction. Lets create a branch, called
abduction, where we will add that word.
To create the branch we use
$ git branch abduction
If we list our branches,
$ git branch --all
abduction * master remotes/origin/HEAD -> origin/master remotes/origin/master
we will notice that we still at the
master branch. To change our current branch we use
$ git checkout abduction
Switched to branch 'abduction'
After we add the word
en.dic we can create a commit with that change.
$ git commit -am "Add abduction"
[abduction fb8dde2] Add abduction 1 file changed, 1 insertion(+)
We can push our branch to GitHub:
$ git push origin abduction
Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 293 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To email@example.com:rgaiacs/YYYY-MM-DD-git-sample.git * [new branch] abduction -> abduction
And we can check our Git tree:
$ git lga | head -n 3
* fb8dde2 (HEAD -> abduction, origin/abduction) Add abduction * 3f3c1bf (origin/master, master) Add words * 22dcdb5 Add words
Notice that the thumbtack
abduction change their position and a new thumbtack,
origin/abduction, is on our tree.
Consider the following commands:
$ git checkout 3f3c1bf
Note: checking out '3f3c1bf'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 3f3c1bf... Add words
$ echo camp >> en.dic
$ git commit -am 'Add camp'
[detached HEAD 8413095] Add camp 1 file changed, 1 insertion(+)
Explain what happened. After that send the new commit to GitHub in a branch called
Create branches called
voluntary that should start at the commit
3f3c1bf. At each branch, add one commit that add the name of the branch into
en.dic. After create the two branches, push them to GitHub.