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"

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";}'