More work on git introduction
This commit is contained in:
parent
13b899e1ed
commit
8859e24eed
@ -1,9 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: "Git Introduction"
|
title: A short introduction to Git
|
||||||
date: 2021-04-14T18:54:16+02:00
|
date: 2021-04-17T02:04:00+02:00
|
||||||
<!-- This: is way too large -->
|
|
||||||
<!-- cover: -->
|
|
||||||
<!-- image: /images/git-logo.png -->
|
|
||||||
categories:
|
categories:
|
||||||
- misc
|
- misc
|
||||||
- git
|
- git
|
||||||
@ -19,8 +16,8 @@ draft: true
|
|||||||
|
|
||||||
Currently, I'm working on my slides for this semester's tutorials for our Software Engineering course.
|
Currently, I'm working on my slides for this semester's tutorials for our Software Engineering course.
|
||||||
I aim to give the students a good introduction to git, as it is an integral part of our toolchain.
|
I aim to give the students a good introduction to git, as it is an integral part of our toolchain.
|
||||||
So I decided to share my thoughts on what a beginner should know about git here.
|
So I decided to share a first *rough draft* of what one should know here. This post is by far not exhaustive.
|
||||||
I'm probably going to expand on this post in later posts.
|
I'm probably going to expand on this post in later posts. Also I'll revise this post a few times, in the next days.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -30,7 +27,7 @@ I'm probably going to expand on this post in later posts.
|
|||||||
## What is it?
|
## What is it?
|
||||||
|
|
||||||
So, what is Git? The xkcd already implies that git is a collaborative, distributed source control system.
|
So, what is Git? The xkcd already implies that git is a collaborative, distributed source control system.
|
||||||
But that is a rather abstract definition. Let's simplify a bit for now. Git tracks changes to your files.
|
But that is a rather abstract definition. Let's simplify a bit for now: Git tracks changes to your files.
|
||||||
|
|
||||||
Essentially Git keeps different versions of your files around, so you can compare them and refer to old versions.
|
Essentially Git keeps different versions of your files around, so you can compare them and refer to old versions.
|
||||||
This is really useful, as it makes it hard for you to lose working code, and easy to compare a broken version to a
|
This is really useful, as it makes it hard for you to lose working code, and easy to compare a broken version to a
|
||||||
@ -50,7 +47,7 @@ Initialized empty Git repository in $project_dir/.git
|
|||||||
|
|
||||||
Git now told you exactly what it did. It prepared a folder for the data it has to track. We now refer to the $project_dir
|
Git now told you exactly what it did. It prepared a folder for the data it has to track. We now refer to the $project_dir
|
||||||
as the working directory, and $project_dir/.git as the repository. Let's create some files, track some changes and take a
|
as the working directory, and $project_dir/.git as the repository. Let's create some files, track some changes and take a
|
||||||
look at how we can interact with those.
|
look at how we can interact with them.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ echo "our first change" > file_one.txt
|
$ echo "our first change" > file_one.txt
|
||||||
@ -135,7 +132,7 @@ Date: Wed Apr 14 19:37:00 2021 +0200
|
|||||||
This is our first commit
|
This is our first commit
|
||||||
```
|
```
|
||||||
|
|
||||||
As we can see, this is our history. It can be rather cumbersome to look at it this way, let's use some options to make
|
As we can see, this is our history. It can be rather cumbersome to look at it this way, let's use an argument to make
|
||||||
it easier to digest:
|
it easier to digest:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -147,7 +144,7 @@ cf04750 This is our first commit
|
|||||||
|
|
||||||
This is a lot more concise, but lacks quite a lot of information. I have a shorthand `git lg` in
|
This is a lot more concise, but lacks quite a lot of information. I have a shorthand `git lg` in
|
||||||
[my configuration](https://git.tobiasmanske.de/user/rad4day/public/dotfiles/tree/.gitconfig)
|
[my configuration](https://git.tobiasmanske.de/user/rad4day/public/dotfiles/tree/.gitconfig)
|
||||||
which would show (colored, not like it's shown here):
|
which would show the following:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ git lg
|
$ git lg
|
||||||
@ -177,3 +174,41 @@ Until now, we just stored data into git. That's nice to know, but how could we r
|
|||||||
|
|
||||||
For example: How do we get back our initial version of file_one.txt, how do we look at it? How can we replace our current
|
For example: How do we get back our initial version of file_one.txt, how do we look at it? How can we replace our current
|
||||||
version with it?
|
version with it?
|
||||||
|
|
||||||
|
There are multiple ways to achieve this. If we just wanted to restore the version of file_one.txt of the last commit, we could use
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git checkout HEAD~ -- file_one.txt
|
||||||
|
# or: (~ is a postfix meaning ancestor of)
|
||||||
|
$ git checkout 4db5410 -- file_one.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Which would restore the older version, thereby overwriting our local version. If we just needed that one line we accidentally deleted, we could also extract that from a diff.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git diff HEAD~ # This will print the diff for all changed files
|
||||||
|
$ git diff HEAD~ -- file_one.txt # This will only print changes to file_one.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Branches
|
||||||
|
|
||||||
|
The last thing I want to introduce today, are branches. Branches make it possible to have multiple parallel change histories.
|
||||||
|
For example one branch could contain a feature you're working on, which is still to be completed, while another one could contain an important bugfix you had to write while developing that feature.
|
||||||
|
|
||||||
|
One may wonder at this point, why we'd not just do all that on master, or at least on a single branch. We'll go into more detail about that when we talk about workflows.
|
||||||
|
|
||||||
|
The basic workflow we'll think about right now is the following:
|
||||||
|
|
||||||
|
1. Have idea for a new feature
|
||||||
|
2. Create a new feature branch
|
||||||
|
3. Develop feature on feature-branch
|
||||||
|
4. Merge feature-branch into master
|
||||||
|
|
||||||
|
We'll leave point one and three as an exercise to the reader, and just work with hypothetical commits.
|
||||||
|
So first we create our branch:
|
||||||
|
```bash
|
||||||
|
$ git checkout -b feature-foobar
|
||||||
|
# if feature-foobar does not exist it will be created.
|
||||||
|
```
|
||||||
|
|
||||||
|
If you now type `git status` it will tell you that you're now working on `feature-foobar`
|
||||||
|
Loading…
Reference in New Issue
Block a user