GIT Mitschrieb

Installation (MacOSX)

Zuerst Homebrew installieren:

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
brew update
brew install git

dann befindet sich GIT unter /usr/local/
Falls vorhanden GIT aus /usr/bin löschen

GIT Konfiguration

Konfiguration für farbige git Ausgaben

git config --global color.ui auto

Konfiguration für verbesserte Logausgabe “git lg”

git config --global alias.lg "log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr %an)%Creset' --abbrev-commit --date=relative"

Git-Completion erlaubt das Ergänzen von GIT Eingaben im Terminal mit der Tabulator-Taste. Git-Completion, in die .profile des User eintragen

source /usr/local/etc/bash_completion.d/git-completion.bash

Git Prompt:

PS1="\[\033[31;38m\]\w\[\033[1;31m\]\$(__git_ps1)\[\033[00m\] "
export GIT_PS1_SHOWDIRTYSTATE=1

Git Befehle

Manpages

Hilfe für die Navigation durch Revisionen

git help revs.parse

Allgemein

git help command_name

GIT Hilfe/Manpage zu bestimmten Befehlen

git status

zeigt Unterschiede von Working-Copy zu Repository

git config -l

zeigt alle für das Projekt relevanten Konfigurationen

git show

zeigt letzten Commit

Git Log

git log

zeigt Commit-Logs

git log --stat

zeigt Statistiken

git log -p

zeigt alle Patches

git log tag_name..tag_name
git log commit_id..commit_id

zeigt alle Änderungen zwischen zwei Tags oder Commits.

git log file_name

zeigt alle Änderung von einer Datei an

git blame file_name

zeigt Änderungen an einer Datei zeilenweise mit Bearbeiter und Zeitstempel an.

Suche in der Historie

git grep foo
git log -S'foo'

Git grep gibt dabei auch gleich die Zeile mit aus, wobei die Suche mittels git log den Commit ausgibt.

Branching

git branch branch_name [commit_id]

legt neuen Branch an

git checkout branch_name

wechselt zum Branch

 git checkout -b branch_name [commit_id]

erzeugt und wechselt zum Branch

git push origin :branch_name

Löscht einen remote Branch

git clean -n
git clean -f

mit Clean lassen sich nicht im Index befindliche Dateien bereinigen. -n zeigt die Dateien an die gelöscht würden. -f führt das Löschen aus.

git reset --hard commit_id

Setzt den HEAD auf eine andere Revision

git checkout commit_id file_name

Holt alte Datei zurück

Mergen

git checkout master
git megre branch_name

Branch zum Master mergen

git reset --merge

Merge-Vorgang abbrechen!

git mergetool

Um einen Konflikt mit Mergetool  zu beheben

git cherry-pick commit_id

Holt ein bestimmtes Feature aus einem Commit und fügt den dem aktuellen Branch ein.

Dateien Ignorieren

Erst müssen die Dateien die Ignoriert werden sollen aus dem Repository raus! Mit dem folgenden Befehl werden Dateien sowohl dem Working-Tree und dem Index gelöscht.

git rm

Manpage für .gitignore

git help gitignore

Die Datei .gitignore kann auch in Unterverzeichnissen liegen. Sie wirkt sich rekursiv auf die Verzeichnisstruktur aus.

Beispiele für Einträge in der .gitignore Datei.

*.log
*~
*.class

 Remote Repositories

git remote add remote_name remote_url

Fügt ein remote Repository hinzu.

git remote -v

Zeigt alle remote Repositories

git push remote_name branch_name

Lädt den Branch branch_name zu dem remote Repository mit dem remote_name.

git fetch

Holt alle remote Branches. Die geholten Branches sind “Tracking-Branches” und read only!

git branch -a

Zeigt auch remote Branches die mit git fetch geholt wurden.

git checkout remote_branch_name

Erzeugt einen neuen Branch basierend auf einem remote Branch und wechselt zu diesem.

git pull

ist die Kurzform für

git fetch
git merge

Rebase / Historie neu schreiben

git rebase -i commit_id

Interaktives Neuschreiben der Historie

git rebase -i master

Wenn auf einem Festure-Branch, kann mit Rebase der lokale Feature-Branch so auf den Stand des inzwischen fortgeschrittenen Master-Branches gebracht werden. D.h. es sieht so aus als hätte man gleich auf dem neusten Stand von Master gebranched.

git pull --rebase

Wenn auf dem Master-Branch gearbeitet wird, werden die lokalen Änderungen auf dem neusten Stand des Remote-Masters aufgesetzt.

Patch: Austausch mit Dateien

git format-patch master

Aus dem Feature-Branch einen Patch zu Master anlegen. Es entstehen 000x.xxx.patch Dateien.

git am patch_name

Mit git am wird ein Patch angewandt. AM steht für Apply-Mail. (Kann auch mit 000* angewendet werden)

Git Stash / Änderungen zur Seite schieben

git stash

Legt die aktuellen Änderungen zur Seite und man befindet sich dann auf dem letzten Commit.

git stash list

Listet alle Stashes

git stash pop

Holt einen Stash zurück

Binäre Bugsuche mit Git – bisect

Mit der GIT-Bugsuche, kann man einen Commit finden, der einen Bug einführt. GIT verwendet dazu eine Binärsuche.

git bisect start
git bisect bad commit_id
git bisect good commit_id

startet die Binärsuche nach dem Bug. Mit bad gibt man die Version an von der man weiss, dass sie den Bug enthält und mit good gibt man die Version an die den Bug noch nicht enthält.

git bisect reset

verlässt die Bugsuche

GIT in GIT – Submodule

git submodule add url_to_repo path

fügt ein anderes Repository zum eigenen Repository hinzu.

 

Dieser Beitrag wurde unter Tutorials abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>