Git-Befehlsreferenz
Inhaltsverzeichnis:
Obwohl ich täglich mit Git arbeite, gibt es immer wieder neue Dinge die man lernen kann. Weil sich die ganzen Befehle kein Mensch merken kann (naja, zumindest ich nicht), habe ich hier mal die für mich wichtigsten Befehle zusammen geschrieben.
Generelle Konfiguration
| Beschreibung | Befehl | Bemerkung |
|---|---|---|
| Git-Benutzer setzen | git config --global user.name “MeinName” | |
| und E-Mail Adresse setzen | git config --global user.email “mail@example.com” | |
| Konfiguration auslesen | git config --global --list | |
| Git merge setzen | git config pull.rebase false | Verhalten von git pull auf “merge” setzen (statt rebase). Nur für aktuelles Repo. |
Repositories klonen
| Beschreibung | Befehl | Bemerkung |
|---|---|---|
| Repository klonen | git clone <Repo-URL> | |
| Repository klonen | git clone -c http.sslverify=false <Repo-URL> | Keine Zertifikats-Prüfung durchführen |
| Aus bestimmtem Branch klonen | git clone -b newFeature <Repo-URL> | |
| In einen bestimmten Commit wechseln | git checkout <Commit ID> | |
| Aus einem bestimmten Branch pullen | git pull origin <Branch-Name> |
Mit Änderungen arbeiten/Commits
| Beschreibung | Befehl | Bemerkung |
|---|---|---|
| Einzelne geänderte Datei der Stage hinzufügen | git add <DATEI> | |
| Alle neuen/geänderten/gelöschten Dateien der Stage hinzufügen | git add . | |
| Dateien commiten | git commit -m “Meine Änderungen” | |
| Dateien in Stage hinzufügen und direkt commiten | git commit -am “Meine Änderungen” | Fügt automatisch alle Dateien dem Stage hinzu |
| Nachricht des letzten Commits korrigieren | git commit --amend -m “Meine korrigierter Commit” | |
| Dateien pushen | git push | Änderungen nach Origin (ins Remote Repo) pushen |
| Änderungen lokal herunterladen | git fetch, danach git merge | fetch = Noch nicht in die lokalen Änderungen einfließen lassen |
| Änderungen lokal herunterladen | git pull | |
| Den Commit für eine bestimmte Datei zurücknehmen | git restore --staged DATEI | |
| Den Commit für alle Dateien zurücknehmen | git restore --staged . | |
| Alle Änderungen an lokalen Dateien verwerfen und neu pullen | git reset --hard HEAD, (OPTIONAL) git clean -f -d, git pull | |
| Eine Datei als Ausführbar markieren | git update-index --chmod=+x pfad/zur/datei |
Infos auslesen
| Beschreibung | Befehl | Bemerkung |
|---|---|---|
| Git-URL und Branches anzeigen | git remote show origin | |
| Verwendetes Protokoll/URL anzeigen (HTTPS/SSH) | git remote -v | |
| Zeige Änderungen zum Working Dir und aktuellen Commit | git diff | |
| Zeige Änderungen von Dateien die im Stage liegen | git diff --staged | Nur Dateien beachten die mit git add dem Stage hinzugefügt wurden |
| Zeige Änderungen die noch nicht zum Commit vorgemerkt sind | git status | |
| Auf welchen Commit zeigt die HEAD-Referenz momentan? | git rev-parse HEAD | Zeigt den Verweis auf den entspr. Commit |
| Alle gelöschten Dateien anzeigen | git log --diff-filter=D --name-only | |
| Codezeilen-Änderungen und entspr. Person anzeigen | git blame [-L 10,12] subfolder/myfile.tf | -L = Zu suchende Zeilen eingrenzen |
| Aktuelle und vergangene Commits anzeigen | git log [--oneline] | --oneline = Nur commit IDs und Nachricht anzeigen |
| Zeige Commit History und deren Änderungen (Patches) | git log -p [-2] | -2 = Zeige nur Änderungen der letzten 2 Commits |
| Zeige aktuellen Commit an, in dem man sich befindet | git show -s [--oneline] | |
| Alle lokalen Branchess und den aktuell Genutzten anzeigen | git branch -a | |
| Zeige alle remote Branches | git branch -r | |
| Zeige Dateien im LFS an | git lfs ls-files |
Submodule
| Beschreibung | Befehl | Bemerkung |
|---|---|---|
| Submodul in bestehendes Repo hinzufügen | git submodule add --branch main git@example.com:pfad/zum/repo/repo.git ./ordner | |
| Git clone eines Repos inkl. Submodule | git clone --recursive git@example.com:pfad/zum/repo/repo.git | |
| Git pull inkl. Submodul | git pull --recurse-submodules | |
| Neueste Version (Commit) des Submoduls pullen | git submodule update --remote | |
| Welcher Commit wird vom Submodul momentan verwendet? | git submodule status | |
| Submodul entfernen | git rm global_config |
Mit Konflikten arbeiten
| Beschreibung | Befehl | Bemerkung |
|---|---|---|
| Zeige Dateien mit Konflikten, inkl. betr. Zeilen | git diff --check |
Konflikt lösen
Du änderst etwas an einer lokalen Datei (z.B. in main), aber in derselben Datei gibt es Änderungen die bereits jemadn gemacht hat, und die in Konflikt mit deiner Änderung stehen. So kannst du den Konflikt lösen:
git commit -am "Meine lokale Änderung"
git push
Eine Fehlermeldung wird erscheinen:
! [rejected] main -> main (fetch first)
Fehler: Fehler beim Versenden einiger Referenzen nach 'git.example.com:tests/test.git'
Hinweis: Aktualisierungen wurden zurückgewiesen, weil das Remote-Repository Commits enthält,
Hinweis: die lokal nicht vorhanden sind. Das wird üblicherweise durch einen "push" von
Hinweis: Commits auf dieselbe Referenz von einem anderen Repository aus verursacht.
Hinweis: Wenn Sie die externen Änderungen integrieren wollen, verwenden Sie 'git pull'
Hinweis: bevor Sie erneut push ausführen.
Hinweis: Siehe auch den Abschnitt 'Note about fast-forwards' in 'git push --help' für
Hinweis: weitere Informationen.
git pull --rebase
Löse nun den Konflikt in der Datei und speichere sie
git add .
git rebase --continue
Der Editor für den Commit erscheint. Prüfe die Commit-Nachricht und passe sie bei Bedarf an. Speichere dann mit :x
git push
- Nun sollte die Änderung im Remote Repo sichtbar sien.
Branches
Branch erstellen
Neuen lokalen Branch erstellen
git checkout -b newFeature
Branch zum Origin pushen
git push origin newFeature
Danach sollte der neue Branch in der Git-Oberfläche sichtbar sein
Branch remote hochladen
git remote add newFeature \<Repo-URL>
Den neuen Branch als Upstream Branch setzen
git push --set-upstream origin newFeature
In den neuen Branch wechseln
git checkout newFeature
Jetzt kann ganz normal commited/gepushed werden
Branch mergen
Den neuen Branch in den main-Branch übernehmen (mergen)
git checkout main
git merge newFeature
git push
Den Branch anschließend lokal löschen
git branch -d newFeature
Den Branch remote löschen auf dem GIT-Server
git push origin -d newFeature
Einen Branch löschen (lokal+remote)
Erst in den Main-Branch wechseln:
git checkout main
git branch -d newFeature
git push origin --delete newFeature
Repo-Anpassungen
Lokales Repo von HTTPS auf SSH umstellen (oder anders herum)
git remote set-url origin \<Repo-URL>
Repository wurde umgezogen - URL anpassen im lokalen Repo
git remote remove origin
git remote add origin git@git.example.com:/<Path>/<Repository>.git
git push --set-upstream origin --all
Eine Commit Message anpassen
Szenario: Du hast mehrere Commits erstellt die noch nicht gepushed sind. Jetzt möchtest du von einem dieser Commits die Commit Nachricht ändern, weil z.B ein Schreibfehler drin ist.
Die letzten Commits anzeigen:
git log [-5]
Nun (ganz wichtig!): Nicht den Hash von dem Commit kopieren den wir ändern möchten, sondern von dem der eins davor gemacht wurde.
git rebase -i 0023cddd
Der Editor öffnet sich, dort steht nun
pick 456e66 #Meine Commit-Meldung
Das “pick” gegen “reword” ersetzen
mit :x speichern
Nun die Commit-Nachricht entspr. anpassen
Mit :x speichern
Kontrollieren mit git log [-5]
.gitignore-Beispiele
build/
.*
.*tmp
password
.env
.py[cd]