–> Webseite: https://git-scm.com/
1. Allgemeine Konfiguration
| Befehl | Beschreibung |
|---|---|
git config user.name | Ausgeben der geltenden Benutzerinformationen |
git config --global user.name “[Name]” | Hinzufügen von Eigenschaften –local = gilt nur für das aktuelle Repository –global = gilt für alle Repos des Benutzers –system = gilt für alle Repos aller Benutzer auf dem Rechner |
==> die Benutzerkonfiguration wird in .gitconfig gespeichert
2. Repository anlegen und verwalten
| Befehl | Beschreibung |
|---|---|
git init | mache aus aktuellem, lokalen Ordner ein Repository (ohne remote Verknüpfung) |
git clone [URL ZUM GITHUB-REPOSITORY] [ | speichere [URL ZUM GITHUB-REPOSITORY] in [PFAD ZUM LOKALEN ORDNER] –branch [BRANCHNAME] = lädt nur einen bestimmen Branch herunter –depth [NUMBER] = lädt nur die letzten [NUMBER] Commits herunter |
git rm -f [FILENAME] | Datei komplett löschen |
git checkout —- [FILENAME] | Datei auf Stand des letzten Commits zurücksetzen (bisherige Änderungen verwerfen) |
git clean -fd | lösche alle ungetrackten Dateien und Ordner aus dem Repository |
git remote -v | zeige Informationen zum verknüpften Remote-Repositories |
git show origin | zeige ausführlichere Informationen zum verknüpften Remote-Repositories |
git remote -v | zeigt URLs der Remotes an |
git remote add origin [REMOTE-REPO SSH-URL] | Hinzufügen der Adresse zum Remote-Repository in neuem, lokalen Repo |
git remote set-url origin [ | Ändern der Adresse zum Remote-Repository in lokalen Repo |
3. Submodules
| Befehl | Beschreibung |
|---|---|
git submodule add [ | downloade Repository in den angegeben Ordner |
git submodule init | nach dem Download muss das Modul initialisiert werden |
git submodule update | nach der Initialisierung muss der Content in den Ordner gepullt werden |
git submodule update -–recursive -–remote odergit submodule update -–init -–recursive | pullen der Submodule nach Klonen des Root-Repositories |
git clone -–recursive [REPO-NAME] | downloade Repository und pulle alle Submodule |
git config submodule.recurse truegit config submodule.recurse false | update alle Submodule bei jedem git pull mit (an/aus) |
git pull --no-recurse-submodules | main branch ohne alle Submodule pullen (einmalig) |
4. Branches
| Befehl | Beschreibung |
|---|---|
git branch -a | zeige alle lokalen Branches |
git branch -r | zeige alle Remote-Branches des Repositories |
git branch [BRANCHNAME] | erstelle einen lokalen Branch |
git checkout [BRANCHNAME] | wechsle den Branch |
git switch - | wechsle zum letzten Branch |
git switch -c [BRANCHNAME] | erstelle neuen lokalen Branch und wechsele hinein |
git branch -D [BRANCHNAME] | löscht lokalen Branch zwangweise -d = löscht nur, wenn bereits gemergt |
git cherry-pick [COMMIT-HASH] | holt beliebigen Commit, bspw aus anderen Branch, in den aktuellen Branch -n = erstellt bei Holen keinen neuen Commit -x = fügt beim Holen Zeile mit Herkunft hinzu |
git fetch -—prune | synchronisiere Branch-Liste mit dem Online-Repository |
git push origin --delete [REMOTE-BRANCHNAME] | lösche Remote -Branch |
git stash -u | speichere alle Änderungen lokal als stash (z.B. vor einem Wechsel des Branches) |
git stash list | zeige Liste von Stash-Einträgen |
git stash pop | lade den letzten Stash-Eintrag |
git merge [BRANCHNAME] | führe [BRANCHNAME] mit aktuellem Branch zusammen –squash = fasst alle Commits des Branches beim Mergen zu einem Commit zusammen –abort = bricht Mergen bei Konflikten ab |
==> Konventionen Benennung von Branches: https://conventional-branch.github.io/
Beispiele:
feature/header-update
fix/navbar-alignment
5. Committen und Pushen
| Befehl | Beschreibung |
|---|---|
git status | zeige aktuellen Status des Repositories -s = kompaktere Ausgabe |
git add . | stage alle Dateien -u = staged nur bereits getrackte Files und schliesst Neue aus |
git add [FILENAME] | stage [FILE] |
git add -N [FILENAME] | stage [FILE] , jedoch ohne Inhalt |
git reset . | alle Dateien unstagen |
git reset [FILENAME] | unstage [FILE] |
git commit -m “[MESSAGE]” | aktuellen Stand commiten mit inhaltbeschreibender Kurznachricht=> Syntax: z.B. Change SideBar Support from WhatsApp to Website (CTCON-49) –amend = überschreibt letzten Commit, z.B. um Fehler zu korregieren |
git reset --hard HEAD^ | letzten gemachten Commit löschen und zum Code auf Stand des vorherigen Commits zurücksetzen |
git reset —-soft HEAD~2 | letzten Zwei gemachten Commits löschen, aber Code nicht verändern |
git revert HEAD~1 | macht letzten Commit rückgängig, durch neuen Commit mit exaktem Gegenteil HEAD~3..HEAD = macht letzte drei Commits rückgängig |
git log | History aller Commits ausgeben |
git log —-oneline | gekürzte History aller Commits ausgeben |
git log —first-parent | zeigt nur Commits, die zum aktuellen Branch gehören |
git log —- | alle Commits ausgeben, die eine bestimmte Datei betreffen |
6. Workarounds
Daily Routine: Feature-Branch aktualiseren: (z.B. vor dem pushen auf gitHub)
| !! im Branch starten | |
| Änderungen stagen | git add . |
| Commit erstellen | git commit -m "[COMMIT-KOMMENTAR]" |
nach main wechseln | git switch main |
| remote/main pullen | git pull |
| in Feature-Branch wechseln | git switch [BRANCHNAME] |
main in [BRANCHNAME] mergen (und eventuell Konflikte lösen) | git merge main |
| eventuell hochladen (z.B. für Pull Request) | git push |
Nach Pull lokal in fremden Remote-Branch wechseln:
git fetch origin | lade alle neuen Branches und Commits vom Remote-Server (ändert lokal nichts) |
git switch -c [LOCAL_BRANCH_NAME] origin/[REMOTE_BRANCH_NAME] | lege lokalen Branch mit Verweis auf Remote-Branch an |
Letzten gepushten Commit rückgängig machen:
| setzt lokalen HEAD um 1 zurück –soft = lässt aktuellen Code unverändert –hard = löscht alle Änderungen seit angegebenem Commit | git reset --soft HEAD~1 |
| pushe geänderte Commit-History (wenn es keine Konflikte gibt) | git push --force-with-lease |
Alle gemachten Commits eines Branches löschen: (z.B. um anschliessend sauber gruppiert neu zu committen)
| zeigt den Commit, mit dem der Branch gestartet ist als Hash, z.B. abc123 | git merge-base main HEAD |
| löscht alle Commits bis abc123 (ohne den aktuellen Code zu ändern) | git reset -–soft abc123 |
| überschreibe den Remote-Branch (inkl. geänderter Commit-History) | git push –force-with-lease |
| unstage alle Files, ohne den Code zu ändern | git reset . |
Anderes Repo als Submodul hinzufügen:
| SSH-Adresse des neuen Repos holen | |
| cloned neues Repo an lokalen Pfad | git submodule add [SSH-REPO] [LOCAL-PATH |
| fügt Submodul zur Konfig (muss in /root des Haupt-Repos gemacht werden) | git add .gitmodules [LOCAL-PATH] |
Änderungen in Submodulen verbergen :
| wechselt in allen Submodule zu letztem Commit (erfordert zurückwechseln zu main bei Verwendung) | git submodule update |
oder: in .gitmodules jedem Submodul ignore = dirty hinzufügendann: comitten und pushen | git config --gobal submodule.all.ignore dirty |
Submodul dauerhaft entfernen:
| relevanten Part aus .gitmodules entfernen | |
| Änderungen stagen | git add .gitmodules |
| relevanten Part aus .git/config entfernen | |
| gecachte Inhalte des Submodules löschen (Pfad ohne / am Ende) | git rm --cached [PATH_TO_SUBMODULE] |
| Submodule aus .git-Ordner löschen (Pfad ohne / am Ende) | rm -rf .git/modules/[PATH_TO_SUBMODULE] |
| Commit erstellen | git commit -m [COMMIT_MESSAGE] |
| Submodule-Ordner löschen | rm -rf [PATH_TO_SUBMODULE] |
| Commit eventuell pushen | git push |
| oder: | |
| eventuell reicht auch => | git rm [PAT_TO_SUBMODULE] |
Lokalen Main-Branch aktualisieren und Feature-Branch rebasen:
| !! im Branch starten: | |
| speichert alle lokalen Änderungen des Working Directories | git stash -u |
| in den Main wechseln | git switch main |
| lokalen Main aktualisieren | git pull |
| zurück in den Branch wechseln | git switch [mein-branch] |
| rebased den Branch auf den neuen Stand des Main | git rebase main |
| lädt die ungetrackten Änderungen des Branches | git stash pop |