Git Cheatsheet (Basics)
Glossary
Keywords | Description |
---|---|
git | Open-source distributed version-control system, used to store code in repositories |
GitHub, GitLab and Bitbucket | Platform for hosting and collaborating on Git repositories |
staging | Proposed files/directories that you'd like to commit |
commit | Saving all staged files/directories to your local repository |
branch | An independent line of development, so you can develop features isolated from each other. Master branch is the default. |
clone | Local version of a repository, including all commits and branches |
remote | Common repository on eg. Github that all team members to keep that changes in sync with |
fork | Copy of a repository owned by a different user |
pull request | A method of submitting contributions to a repository |
HEAD | Represents your current working directory |
Configuration
Key/Command | Description |
---|---|
git config --global user.name [name] |
Set author name to be used for all commits |
git config --global user.email [email] |
Set author email to be used for all commits |
git config color.ui true |
Enables helpful colorization of command line output |
Core Commands
Key/Command | Description |
---|---|
git init [directory] |
Creates new local repository |
git clone [repo] |
Creates local copy of remote repository |
git add [directory] |
Stages specific [directory] |
git add [file] |
Stages specific [file] |
git add -A |
Stages all changed files |
git add . |
Stages new and changed files, NOT deleted files |
git add -u |
Stages changed and deleted files, NOT new files |
git commit -m "[message]" |
Commit everything that is staged |
git status |
Shows status of changes as untracked, modified or staged |
Synchronization of Changes
Key/Command | Description |
---|---|
git fetch |
Downloads all history from the remote branches |
git merge |
Merges remote branch into current local branch |
git pull |
Downloads all history from the remote branch and merges into the current local branch |
git push |
Pushes all the commits from the current local branch to its remote equivalent |
Tip: git pull
is the combination of git fetch
and git merge
Undo Changes
Key/Command | Description |
---|---|
git checkout -- [file] |
Replace file with contents from HEAD |
git revert [commit] |
Create new commit that undoes changes made in [commit], then apply it to the current branch |
git reset [file] |
Remove [file] from staging area |
git reset --hard HEAD |
Removes all local changes in working directory |
git reset --hard [commit] |
Reset your HEAD pointer to previous commit and discard all changes since then |
Branches
Key/Command | Description |
---|---|
git branch [branch] |
Create a new branch |
git checkout [branch] |
Switch to that branch |
git checkout [branch] -b |
Create and checkout new branch |
git merge [branch] |
Merge [branch] into current branch |
git branch -d [branch] |
Deletes the [branch] |
git push origin [branch] |
Push [branch] to remote |
git branch |
Lists local branches |
git branch -r |
Lists remote branches |
git branch -a |
Lists local and remote branches |
History
Key/Command | Description |
---|---|
git log |
Lists version history for the current branch |
git log --author=[name] |
Lists version history for the current branch from certain author |
git log --oneline |
Lists compressed version history for the current branch |
git show [commit] |
Outputs metadata and content changes of the specified commit |
git blame [file] |
Shows who changed what and when in file |
Gitignore
You can list files/directories that you want to explicitely exclude from Git in a .gitignore
file. This file should be placed at the root of your repository.
It is noted that people usually exclude dependency caches, such as node_modules
, system files, such as .DS_Store
, among others.
You can see the .gitignore
file of this repository or more examples provided by GitHub.
Platforms
The following platforms can be used to host your repositories.
Platform | Price |
---|---|
GitHub | Free |
GitLab | Free |
Bitbucket | Free |
Config stuff
Ajouter votre nom dans la config globale :
git config --global user.name "John Doe"
Vérifier si c’est correct :
git config --global user.name
Définir votre courriel :
git config --global user.email "jdoe@example.com"
Afficher le courriel :
git config --global user.email
Le résultat de ma config cat ~/.gitconfig
:
# Mettre ce fichier ".gitconfig" dans votre home folder.
[user]
name = John Doe
email = jdoe@example.com
[core]
editor = vim
autocrlf = input
[color]
status = auto
diff = auto
[push]
followTags = true
[http]
sslverify = false
[url "https://jdoe@10.1.1.11"]
insteadOf = https://10.1.1.11
[url "https://jdoe@git.example.com"]
insteadOf = https://git.example.com
[credential]
helper = cache --timeout=3600
Pour afficher toutes les configs perso :
git config --list
To view the information that you entered, type :
git config --global --list
How to find out which Git config file is used and how to override settings
git config --list --show-origin
Go to the master branch to pull the latest changes from there
git checkout master
pull, add, commit, push
Download the latest changes in the project This is for you to work on an up-to-date copy (it is important to do every time you work on a project), while you setup tracking branches.
git pull REMOTE NAME-OF-BRANCH -u
View the changes you've made It's important to be aware of what's happening and what's the status of your changes.
git status
Add changes to commit You'll see your changes in red when you type "git status".
git add CHANGES IN RED
git commit -m "DESCRIBE THE INTENTION OF THE COMMIT"
Send changes to gitlab
git push REMOTE NAME-OF-BRANCH
Delete all changes in the Git repository, but leave unstaged things
git checkout .
Pour modifier un package du repo et le repousser
On va chercher les fichiers sur le serveur git.
git clone -c http.sslVerify=false https://10.1.1.11/myrepo/projet-a.git
# ou
git clone git@10.1.1.11:myrepo/projet-a.git
Après nos modifications, on les ajoute au git local.
git add .
Commit des changements dans le git local.
git commit -m "Commentaire sur les changements."
# ou
git commit --author="John Doe <john.doe@exemple.com>" -m "Commentaire sur les changements."
Afficher les commits
git show
Joindre un tag au commit ()
git tag -a v0.1-6 9fceb02 -m "Version 0.1-6"
On pousse le tout sur le serveur git.
git push
# ou
git push origin v0.1-6
On pousse les tags
git push --tags
# ou seulement un (1) :
git push origin v0.1-6
Version courte :
git add .
git commit --author="John Doe <jdoe@example.com>" -m "Commentaire sur les changements."
git show # Pour afficher le no. du commit, par exemple : "commit 0928f8e2bafd1537ad1281beba3b05541251753c".
git tag -a v0.1-6 0928f8e2bafd1537ad1281beba3b05541251753c -m "Version 0.1-6" # Assigne le tag au no. du commit.
git push
git push origin v0.1-6
Création d'une nouvelle branche
Commande pour créée une nouvelle branche, par exemple "testing_new_code" :
git branch testing_new_code
On pointe notre environnement/dossier de travail sur cette nouvelle branche :
git checkout testing_new_code
On fait la procédure normale pour la suite :
touch nouveau_fichier.txt
git add .
git commit -a -m 'Ajout d'un nouveau fichier'
git push --set-upstream origin testing_new_code
Retourner sur la branche principale :
git checkout master
Voir toutes les différences entre le commit et l'état du fichier actuel
git diff
Voir les différences d'un seul fichier
git diff mon_fichier.txt
Affiche les différences entre deux branches (des commits bien sûr)
git diff master..18.04-experimental
Pour voir les commits et ultiment choisir celui a revenir :
git log
# ou
git log --oneline
# Ex. :
git revert -e 320934b314a82c8ea0e94eeeca5c84e9497231c2
Création d'un nouveau projet
Les commandes ci-dessous sont pour faire un premier commit d’un projet dans le groupe « myrepo » :
cd <racine_de_votre_projet> # Exemple : cd /sources/nom_du_projet>
git init
git remote add origin https://10.25.24.71/myrepo/<nom_du_projet>.git # Il doit déjà existé sur le serveur Git.
git add .
git commit -m "Initial commit"
git -c http.sslVerify=false push -u origin master
Un login vous sera demander, c’est le vôtre qu’il faudra entrer.
Pour enlever manuellement le sync d'un fichier à ignorer avant l'ajout d'un .gitignore
git rm --cached <FILENAME>