Git Kniffe und Tricks

Erstellt: 06.12.2021 Bearbeitet: 05.12.2025

Einen alten Branch-Namen nach Merge neu nutzen

git checkout master
git pull
git branch -d branchname
git checkout -b branchname
git push origin branchname

Das geht aber nur, wenn der Branch schon gemerged und gelöscht wurde!

chmod auf eine Datei im Git-Repo

git update-index --chmod=+x path/to/file

Um das Exec-Bit zu löschen:

git update-index --chmod=-x path/to/file

Anzeigen von chmod im Git-Index

git ls-files --stage path/to/file
cd destdir
ln -s ../../../existing_file symlinkfile
git add symlinkfile
git ls-files -s symlinkfile     # zeigt Link
git cat-file -p linkhash        # zeigt Quelle

Wenn das Zielfile Git schon bekannt war, muss man es erst aus Git löschen, bevor man es mit add hinzufügen kann!

Git Config prüfen

Zum Auflisten der aktuellen Config gibt es die Option --list:

git config --list

Und zum Ändern einer Option kann man sie z. B. mit --global ändern:

git config --global user.name "dein Name"

Git das Passwort speichern erlauben

Git bringt eine einfache Methode zum Passwortspeichern mit, die allerdings nicht unbedingt sicher ist. Zum Aktivieren muss man nur diese Zeile ausführen und Git speichert das Passwort für die Repos.

git config --global credential.helper store

Nun muss man nur noch einmal z. B. ein

git pull

ausführen und er speichert die Zugangsdaten für das nächste Mal in der Datei ~/.git-credentials im Klartext. Es ist also eine sehr unsichere Sache.

Alternativ kann man auch nur einen Memory-Cache mit Timeout nutzen:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'

Dann hält er das Passwort nur im RAM und verwirft es nach dem Timeout.

Es existieren auch noch ein paar andere Methoden, hier eine interessante Zusammenfassung auf stackoverflow.com

git mtime restore

Manchmal braucht man die mtime für Dateien und wenn man eine Datei nicht modifiziert hat, wird die neue mtime eventuell nicht richtig gesetzt. Für dieses Problem gibt es aber eine einfache Lösung:

sudo apt install git-restore-mtime
cd [repo]
git restore-mtime

Commit-Log in der Shell

git log --graph --all --decorate --oneline --simplify-by-decoration