Random Git Tricks
In Git entdecke ich immer wieder faszinierende Funktionen, mit denen man tolle Dinge machen kann. Es ist schon erstaunlich, wie viele Anwendungsfälle von diesem Tool abgedeckt werden. Bei der Fülle von Funktionen nutzt man aber nur eine Hand voll regelmäßig, sodass selten genutzte, aber sehr praktische Funktionen leicht in Vergessenheit geraden.
Damit ich nicht jedes Mal wieder von neuem auf die Suche gehen muss, sammle ich in diesem Artikel einige nette Dinge zu Git, die man vielleicht mal wieder brauchen könnte.
- Submodules verwalten und aktualisieren
- Repository teilweise clonen
- Absolut leeren Branch erzeugen
- Merge ohne Änderungen
Submodules verwalten und aktualisieren
Submodule erstmalig initialisieren oder aktualisieren:
$ git submodule update --init
Alle Submodule auf den aktuellen origin/master setzen. Das setzt natürlich voraus, dass man origin/master verwenden möchte.
$ git submodule foreach git pull origin master
Update: Inzwischen ist das ganze deutlich einfacher, denn es gibt nun den Befehl
$ git submodule update --remote
Repository teilweise clonen
Hat einen eigenen Artikel bekommen.
Absolut leeren Branch erzeugen
Ganz praktisch, wenn man in einem Repository mehrere unabhängige Projekte sammelt. Macht nicht immer Sinn. Beispielsweise nutzt es GitHub für die Pages oder ich bei den Skripten für die Uni (alte und neue Version in getrennten Branches).
$ git checkout --orphan NEWBRANCH
Der nächste Commit wird dann keinen Parent haben. Der Index enthält aber bereits die Dateien vom vorherigen (bzw. angegebenen) Commit. Das sollte man ggf. bereinigen:
$ git rm -rf .
Merge ohne Änderungen
Manchmal (selten) möchte man einen Branch mergen, ohne die Änderungen zu übernehmen. Der einzige Zweck ist es, um zu symbolisieren, dass der Branch berücksichtigt wurde (durch mehrere Parents). Das lässt sich mit der ours Merge-Strategie machen:
$ git merge -s ours MERGE_BRANCH
This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches. It is meant to be used to supersede old development history of side branches. (…)