Git Cheat Sheet

Create

  • Clone and Existing Repository

    $ git clone ssh://user@domain.com/repo.git
  • Create a new local repository

    $ git init
  • Clone and Existing Repository

    $ git clone ssh://user@domain.com/repo.git
  • Clone and Existing Repository

    $ git clone ssh://user@domain.com/repo.git

Local Changes

  • Changed files in your working directory

    $ git status
  • Changes to tracked files

    $ git diff
  • Add all current changes to the next commit

    $ git add .
  • Add some changes in <file> to the next commit

    $ git add -p <file>
  • Commit all local changes in tracked files

    $ git commit -a
  • Commit previously staged changes

    $ git add -p <file>
  • Add some changes in to the next commit

    $ git commit
  • Change the last commit Don‘t amend published commits!

    $ git commit --amend

Branching & Tags

  • List all existing branches

  • Switch HEAD branch

  • Create a new branch based on your current HEAD

  • Create a new tracking branch based on a remote branch

  • Delete a local branch

  • Mark the current commit with a tag

Update & Publish

  • List all currently configured remotes

  • Show information about a remote

  • Add new remote repository, named <remote>

  • Download all changes from <remote>, but don‘t integrate into HEAD

  • Download changes and directly merge/integrate into HEAD

  • Publish local changes on a remote

  • Delete a branch on the remote

  • Publish your tags

Merge & Rebase

  • Merge <branch> into your current HEAD

  • Rebase your current HEAD onto <branch> Don‘t rebase published commits!

  • Abort a rebase

  • Continue a rebase after resolving conflicts

  • Use your configured merge tool to solve conflicts

  • Use your editor to manually solve conflicts

  • After resolving mark file as resolved

Undo

  • Discard all local changes in your working directory

  • Discard local changes in a specific file

  • Revert a commit (by producing a new commit with contrary changes)

  • Reset your HEAD pointer to a previous commit & discard all changes since then

  • Reset your HEAD pointer to a previous commit & preserve all changes as unstaged changes

  • Reset your HEAD pointer to a previous commit & preserve uncommitted local changes

Git ignore patronen

Patroon
Voorbeeldovereenkomsten
Uitleg*

**/logs

logs/debug.log logs/monday/foo.bar build/logs/debug.log

Je kunt een patroon vooraf laten gaan door een dubbele asterisk zodat overeenkomsten worden gezocht met mappen in de gehele repository.

**/logs/debug.log

logs/debug.log build/logs/debug.log maar niet logs/build/debug.log

Je kunt ook een dubbele asterisk gebruiken om bestanden te matchen op basis van hun naam en de naam van hun bovenliggende map.

*.log

debug.log foo.log .log logs/debug.log

Een asterisk is een jokerteken dat overeenkomt met nul of meer tekens.

*.log !important.log

debug.log trace.log maar niet important.log logs/important.log

Door vooraan een uitroepteken te plaatsen, zal het patroon het negeren. Als een bestand overeenkomt met een patroon, maar ook met een ontkenningspatroon dat later in het bestand is gedefinieerd, wordt het niet genegeerd.

*.log !important/*.log trace.*

debug.log important/trace.log maar niet important/debug.log

Patronen die ná een ontkenningspatroon zijn gedefinieerd, zullen alle eerder ontkende bestanden opnieuw negeren.

/debug.log

debug.log maar niet logs/debug.log

Door vooraan een slash toe te voegen, worden alleen bestanden in de hoofdmap van de repository gezocht.

debug.log

debug.log logs/debug.log

Patronen komen standaard overeen met bestanden in een map

debug?.log

debug0.log debugg.log maar niet debug10.log

Een vraagteken komt overeen met precies één karakter.

debug[0-9].log

debug0.log debug1.log maar niet debug10.log

Er kunnen ook blokhaken worden gebruikt om een enkel teken uit een bepaalde reeks te matchen.

debug[01].log

debug0.log debug1.log maar niet debug2.log debug01.log

Blokhaken komen overeen met één teken uit de opgegeven set.

debug[!01].log

debug2.log maar niet debug0.log debug1.log debug01.log

Een uitroepteken kan worden gebruikt voor overeenkomsten met elk teken, behalve één uit de opgegeven set.

debug[a-z].log

debuga.log debugb.log maar niet debug1.log

Reeksen kunnen numeriek of alfabetisch zijn.

Logboeken

logs logs/debug.log logs/latest/foo.bar build/logs build/logs/debug.log

Als je geen slash voor de naam plaatst, zoekt het patroon zowel bestanden als de inhoud van mappen met die naam. In het voorbeeld links worden zowel mappen als bestanden met de naam logs genegeerd.

logs/

logs/debug.log logs/latest/foo.bar build/logs/foo.bar build/logs/latest/debug.log

Het toevoegen van een slash vooraan geeft aan dat het patroon een map is. De volledige inhoud van elke map in de repository die overeenkomt met die naam — inclusief alle bestanden en submappen — wordt genegeerd.

logs/ !logs/important.log

logs/debug.log logs/important.log

Wacht even! Zou logs/important.log niet moeten worden genegeerd in het voorbeeld links? Nee hoor! Vanwege een prestatiegerelateerde eigenaardigheid in Git kun je een bestand dat wordt genegeerd niet negeren vanwege een patroon dat overeenkomt met een map

logs/**/debug.log

logs/debug.log logs/monday/debug.log logs/monday/pm/debug.log

Een dubbele asterisk komt overeen met nul of meer mappen.

logs/*day/debug.log

logs/monday/debug.log logs/tuesday/debug.log maar niet logs/latest/debug.log

Jokertekens kunnen ook worden gebruikt in mapnamen.

logs/debug.log

logs/debug.log maar niet debug.log build/logs/debug.log

Patronen die een bestand in een bepaalde map opgeven, zijn relatief ten opzichte van de hoofdmap van de repository. (Je kunt desgewenst een slash vooraan plaatsen, maar die doet niets bijzonders.)

Last updated