Git Knowledge Base
Aus MattWiki
Gutes Video-Einleitung (und Quelle für untenstehendes):
Learn Git in 20 Minutes → https://www.youtube.com/watch?v=Y9XZQO1n_7c
Grundbefehle
git init Initiieren nano .git/description # Projektbeschreibung einfügen git status Status des Repository git add <file> Staging einer Datei git add . Staging aller Dateien (exkl. Ignore-Liste) git add *.html Staging aller *.html-Dateien git log Commit Historie anzeigen git bundle create file.git --all Gesamtes serverseitiges Repository in eine Datei packen
Git Global Config
git config --global user.name # Return user name git config --global user.name "FirstName LastName" # Set FirstName LastName as user name git config --global user.email # Return user email git config --global user.email "example@email.com" # Set example@email.com as user email
Nützliche Programme
git gui Grafische Oberfläche für Commits gitk Grafische Oberfläche für History
Commits
Mit Texteditor
git commit Committext-Eingabe VIM-ähnlich:
Vorgehen in VIM
- I drücken → Wechselt zu Insert Mode
- Comit Text eingeben
- Esc drücken
- :wq eingeben (Speichern + Beenden)
Per Commandline
git commit -m 'change text'
Dateien ignorieren
Git-Ignore-Datei erstellen:
touch .gitignore
Beispielinhalt'
# Archiv-, Log- und Object-Dateien *.a *.o *.log # Emacs-Backupdateien (Alle, die mit ~ enden) *~ # Verzeichnisse ignorieren bin/ obj/
Entwicklungszweige
Allgemein
git branch -a Alle zweige auflisten git branch NewBranch Neuen Zweig "NewBranch" erstellen git branch -d NewBranch Zweig "NewBranch" löschen git branch -m NewName Aktuellen Zweig in "NewName" umbenennen git checkout NewBranch Zum Zweig "NewBranch" wechseln git checkout master Zum Master-Zweig zurückkehren (heißt meistens so) git merge SourceBranch Änderungen in SourceBranch in aktuellen Branch mergen git mergetool Mergewerkzeug
Zweig wechseln ohne Commit
Wenn man den Zweig wechselt, ohne vorher zu adden/committen werden neue Dateien nicht dem ursprügnlichen Zweig zugeordnet. Um dies zu vermeiden, kann man einen WIP-Stack in einem Zweig anlegen, bevor man den Zweig wechselt:
git add . Zuerst alle Dateien adden git stash Änderungen in WIP-Status dem Zweig zuordnen git checkout <Branch2> Wechseln ... Bearbeiten git checkout <Branch1> Zurückwechseln git stash apply Datein aus WIP-Status wieder zurückholen
Remote-Repositories
Allgemein
git remote Namen des Remote-Repositories anzeigen git remote -v Namen und Pfade des Remote-Repositories anzeigen git remote add <name> <remotepath> Remote-Repository unter dem Namen bekannt machen git remote remove <name> Rremote-Repository entfernen
Holen
git clone https://host/*.git Klonen des *.git-Repositories vom Host git fetch <reponame> <branch> Änderungen seit letztem clone/fetch in den aktuellen Zweig holen, ohne automatisch zu mergen git pull <reponame> <branch> Änderungen ins aktuelle Repository fetchen und automatisch mergen
Senden
git commit -a -m 'text' Zuerst committen git push <reponame> <branch> Änderungen an Zweig in Remote-Repository übertragen/committen git config --global push.default matching Setzt push.default auf matching, was dazu führt, dass git push immer an den Remote Branch mit dem gleichen Namen hochlädt git push Setzt push.default voraus - siehe oben git push --set-upstream origin master
Git-Aware Bash-Prompt
Bash erweitern um Erkennung von Git-Archiven.
emacs ~/.bashrc
Am Ende einfügen:
# Git aware bash prompt export GIT_PS1_SHOWDIRTYSTATE=true export GIT_PS1_SHOWUNTRACKEDFILES=true export GIT_PS1_SHOWSTASHSTATE=true export PS1="${PS1::$((${#PS1}-3))}\$(__git_ps1 ' [\[\e[34;1m\]%s\[\e[0m\]]')\$ "
The Seven Rules of a Great Commit Message
Source: https://chris.beams.io/posts/git-commit/#seven-rules
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
Use the imperative mood in the subject line
Commit subject lines should be written in the imperative mood, i.e.:
- Clean your room
- Close the door
- Take the trash out
Examples:
- Refactor function X
- Remove deprecated classes
- Update getting started documentation
Goal is to have the commit subject line complete the following line in a meaningful sense:
- If applied, this commit will <your subject line here>
Examples:
- If applied, this commit will refactor function X
- If applied, this commit will remove deprecated classes
- If applied, this commit will update getting started documentation