Git CheatSheet

28 Mar 2019

Branches

Einstellungen

Setze Benutzernamen:

get config --global user.name "MeinName"

Setze E-Mail Adresse:

get config --global user.email "meine@mail.adresse"

Setze Standard Editor:

git config --global core.editor "vim"

Deaktiviere pageing Output

git config --global pager.branch false

Automatisch in neuen remote branch pushen wenn der aktuelle branch noch nicht getracked wird, see 'push.autoSetupRemote' in 'git help config'.

git config push.autoSetupRemote true

Localen Branch umbenennen

Wenn der branch gerade aktiv ist:

git branch -m neuer-name

Wenn gerade ein andere branch aktiv ist:

git branch -m alter-name neuer-name

Remote Branch umbenennen

git push origin :alter-name neuer-name

Den Upstream Branch zurücksetzen

git push origin -u neuer-name

Einen Remote Branch löschen

git push origin :branch-name

Merges

Multiple sign-off

Sign off alle einzelnen Commits eines Branches und füge sie an den master Branch

git cherry -v master BRANCH-YOU-LIKE-TO-MERGE | cut -f2 -d ' ' | while read LINE; do git cherry-pick -s ${LINE}; done

Oder sign off die letzten x commits

git rebase -i --signoff HEAD~2   # Sign Off die letzten zwei commits

Rebase

Rebase bis zum initialen Commit

git rebase -i --root

Einen Commit wieder aufteilen

git rebase -i HEAD~10 # gewünschten Commit mit `edit` am Anfang der Zeile markieren, speichern und schliessen
git reset HEAD^
git add -p                     # partial Commit des gewünschten patches
git commit -m "Erster Teil"
git add -p 
git commit -m "Zweiter Teil"
...
git rebase --continue

Tags / Tagging

Tag setzen

git tag mytag

Tags pushen

git push --follow-tags

In der config als default setzen

git config --global push.followTags true

Statistik

Ein schönes Tool um git Statisiken anzuzeigen "git-fame"

pip3 install --user git-fame
git-fame

Oder ein anderer Einzeiler gefunden bei stackoverflow

git log --shortstat --pretty="%cE" | sed 's/\(.*\)@.*/\1/' | grep -v "^$" | awk 'BEGIN { line=""; } !/^ / { if (line=="" || !match(line, $0)) {line = $0 "," line }} /^ / { print line " # " $0; line=""}' | sort | sed -E 's/# //;s/ files? changed,//;s/([0-9]+) ([0-9]+ deletion)/\1 0 insertions\(+\), \2/;s/\(\+\)$/\(\+\), 0 deletions\(-\)/;s/insertions?\(\+\), //;s/ deletions?\(-\)//' | awk 'BEGIN {name=""; files=0; insertions=0; deletions=0;} {if ($1 != name && name != "") { print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net"; files=0; insertions=0; deletions=0; name=$1; } name=$1; files+=$2; insertions+=$3; deletions+=$4} END {print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net";}'