Author: Darko Vucetic d.vucetic@vegait.rs
- Here is a quick overview of what we will learn:
- Git basics
- viewing the change history
- creating and merging branches
- working with remote repositories
- creating merge requests
- resolving conflicts
- you need to have Git installed on your computer
- check if Git is installed by using this command:
git --version
- a repository is a place that stores something
- a Git repository stores files and keeps track of any changes
- we want to be able to keep track of all changes, to see who has made them and, if needed, have the possibility to revert to a previous version
- to create a new Git repository run this command inside an empty folder:
mkdir my-cool-website
cd my-cool-website
git init
git init
has created a hidden folder called.git
which stores the repository- use
git status
to check the current status of the repository
- to identify who has made a specific change, we need to configure our name and email
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "MY_NAME@example.com"
- this will help anyone to look at the changes in the repository see who has made them
- a commit is a snapshot of the repository at a point in time
- steps to create a commit:
- create a new file index.html with content:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Workshop</title></head>
<body>
<h2>Vega IT Git Workshop</h2>
</body>
</html>
- check status by running
git status
- stage the file by running
git add <FILE NAME>
- commit the file by running
git commit -m "Init"
- the staging process allows us to select which files we want to commit (to group commits)
- to add all changes to a commit you can use
git add .
orgit add --all
- if you wish to unstage a file, you can use the command:
git reset HEAD <FILE>
- use the
git log
command to view a list of changes - use
git log --patch
for a more detailed history
- you cannot commit an empty folder with Git
- to have a folder tracked by Git, add an emtpy file called
.gitkeep
.gitkeep
is just a convention, not a rule.
- to delete a file it depends if it is tracked or untracked
- to delete a file tracked by Git, you need to remove it from the file system and commit this change
- not all files need to be stored in Git but need to be part of the folder used with Git
- example for a
.gitignore
file:
njinja.png
- this works only for files that have not been committed already
- branching helps you divert from the main development work
- branches are often prefixed with
feature
,bugfix
,hotfix
etc. - create a new branch with:
git checkout -b <BRANCH NAME>
orgit switch -C <BRANCH NAME>
- to switch back to master/main run:
git checkout master
- you have to be inside the branch where you want to have the result of the merge (typically the master/main branch)
- the command you use is
git merge <BRANCH YOU WISH TO MERGE>
- verify the command output says "fast-forward merge"
- use
git log
to view the commits added
- if you continue making changes in the master branch after the point in time the branch is created, a fast-forward merge is no longer possible.
- git merge will try to merge the branches even if they have different parents
- we often try to avoid merge commits to keep the history clean
- you run rebase on the branch you want to sync with the master/main branch
git rebase master
- merge conflicts are one of the most annoying things in Git
- they are a normal occurrence but they still cause a lot of frustration.
- you can abort a merge:
git merge --abort
- you can get a merge conflict when rebasing as well
- I recommend resolving conflicts in VSC or other IDEs.
- Git is a distributed versioning system
- We can have local repositories, but we can also have remote repositories
- we often use remote repositories like GitLab, GitHub, Bitbucket to collaborate with others the project, to share changes
- you need a github.com account which is free to create
- create new repo
- origin <- alias for the remote repository
- setup ssh key
- commits are not automatically sent to the remote repository
- to push changes use
git push
- example for pushing the master branch:
git push origin master
- you can pull changes with
git pull
- example:
git pull origin master
- use
git pull --rebase
to rebase any unpushed commits - pull and rebase often to avoid merge conflicts
- short-lived branches work best and reduce complexity, keep them as small as possible
- if the remote repository contains changes you don't have you cannot push any commits
- pulling changes may conflict with your own commits (similar to merging a branch)
- use
git pull --rebase
to rebase local changes with remote changes - example:
git pull origin master --rebase
- cloning refers to the action o creating an exact copy of an existing Git repository
- the command is:
git clone <REPOSITORY LOCATION>
- a merge request is a way to review and integrate changes into the master branch
- spend more time practicing the concepts demonstrated until you get used to them