Cheatsheet: Branching mit Git

Noch so eine Liste mit Git Befehlen? Jain. In diesem Beitrag geht es in erster Linie um Git Befehle, die ich (teilweise) nicht jeden Tag nutze und immer wieder nachschauen müsste. Daher habe ich die Befehle hier einmal zusammengeschieben:

Inhalt


Git Konfiguration

Aliase anlegen

git config --global alias.branches "branch --all --verbose"
git config --global alias.tree "log --graph --oneline --decorate --all"
  • git branches zeigt nun alle Branches (auch remote) inkl. letzem Commit-Hash und Commit-Kommentar an
  • git tree zeigt nun die einzelnen Branches bunt und strukturiert an (also git log in „schön“)

Merge und Push anpassen

git config --global merge.ff false
git config --global pull.ff only
  • git merge verwendet nun kein „Fast-forward“ mehr (es sei denn, der --ff Parameter wird explizit übergeben) ohne dass jedesmal --no-ff angegeben werden muss
  • git pull kann nur noch verwendet werden, wenn ein „Fast-forward“ möglich ist

Git Branches

Genereller Arbeitsablauf

Generell arbeite ich mit master und develop als Hauptbranches. Der master Branch ist das Produktionssystem und sollte immer sauber gehalten werden. Alle Entwicklungen werden auf dem develop Branch durchgeführt oder auf einem vom develop Branch abgehenden featureXYZ Branch.

## go to branch "develop" we want to work on
git checkout develop

## make sure develop branch is up-to-date (no merge here!)
git rebase master

## add fancy stuff now and commit as often as you wish
git commit

## push changes to remote "develop" (if you wish and available)
git push

## when finished go back to "master" branch
git checkout master

## add changes in "develop" branch to "master" branch via merge (with --no-ff as default)
git merge develop

## push changes to remote "master" (if you wish and available)
git push

## add and push tag (if you wish)
git tag 1.2.0
git push origin 1.2.0

Branch umbenennen (Lokal)

## variant 1
git branch -m old-name new-name

## variant 2
git checkout old-name
git branch -m new-name

Statt git branch -m (Kurzform) kann auch git branch --move (Langform) geschrieben werden.

Branch umbenennen (Remote)

## variant 1
git push origin origin/<old_name>:refs/heads/<new_name> :<old-name>

## variant 2
git push origin :<old_name>
git push origin <new_name>:refs/heads/<new_name>

Branch löschen

## local
git branch -d test

## remote
git push origin --delete test

Push Konflikte beheben

Bei Fehlermeldungen a la error: „Aktualisierungen wurden zurückgewiesen, weil die Spitze Ihres aktuellen Branches hinter seinem externen Gegenstück zurückgefallen ist. Führen Sie die externen Änderungen zusammen“ einfach mit dem Remote Branch rebasen:

## rebase local repo with origin
git pull --rebase origin master

## push local changes back to origin
git push origin master

Änderungen rückgängig machen

Manchmal hat man was falsches committed. Mit git reset (siehe Git-Seite) kann man einfach zu einem früheren Commit zurück springen:

git reset --hard <commit-id>

Wenn ein Commit bereits (zu Github) gepushed wurde, kann man das so wieder korrigieren:

## undo local commit
git reset --soft HEAD^

## make changes or fix typos

## commit again
git commit

## push again (and force to overwrite old commit)
git push --force origin master

Git Tracking

Tracking Branch hinzufügen (Remote Branch)

## add "origin" remote to repo
git remote add origin git@github.com:<user>/<repo>
git push -u origin master

Tracking Informationen anzeigen

## show remote config for "origin"
git remote show origin

## show remotes
git remote -v

Push & Track

Branch develop an origin/develop pushen und gleichzeitig origin/develop als Tracking Branch eintragen:

git checkout develop
git push -u origin develop

Statt git push -u (Kurzform) kann auch git push --set-upstream (Langform) geschrieben werden

Tracking manuell setzen

## set single remote tracking branch "origin/master" for current repository
git remote set-branches origin master

## remove remote branch "origin/bla" from current repo without deleting remote branch itself
git branch -rd origin/bla

## set tracking branch "origin/master" for specific local branch "master" of this repo
git branch -u origin/master [master]

Statt git branch -rd (Kurzform) kann auch git branch --remotes --delete (Langform) geschrieben werden

Statt git branch -u (Kurzform) kann auch git branch --set-upstream-to (Langform) geschrieben werden


Git Klonen

Lokales Repo klonen

## clone local repo to another local repo
git clone --single-branch --local /path/to/orig /path/to/copy

## switch to old repo
cd /path/to/orig

## add single
git remote add origin --track master /path/to/new

Remote Fork (Github) auf Stand bringen

# clone your fork
git clone git@github.com:<fork_user>/<fork_repo>.git <path>
cd <path>
git checkout master

# add original repo as remote "upstream"
git remote add upstream git@github.com:<original_user>/<original_repo>.git

# merge your repo with original repo
git fetch upstream 
git merge --ff-only upstream/master

# push back changes to your remote repo
git push

Git Änderungen prüfen

Alle geänderten PHP Dateien vor dem Commit auf Syntaxfehler prüfen

# check modified php files
find $(git ls-files -m) -name "*.php" -exec php -l {} \; 1>/dev/null

Git Links

Weiterführende Links:

Anregungen? Fragen? Fehler? Einfach melden!
Ich freue mich mich jederzeit über Feedback ;)

Das könnte dich auch interessieren …

Schreibe einen Kommentar

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

Bitte beachte die Hinweise zum Datenschutz