Übersicht: git-Befehle

–> Webseite: https://git-scm.com/

1. Allgemeine Konfiguration

BefehlBeschreibung
git config user.name
git config user.email
git config  --global --list
Ausgeben der geltenden Benutzerinformationen
git config --global user.name “[Name]”
git config --global user.email “[Email]”
git config --local init.defaultBranch main
git config --system core.editor "code --wait"

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

BefehlBeschreibung
git initmache aus aktuellem, lokalen Ordner ein Repository (ohne remote Verknüpfung)
git clone [URL ZUM GITHUB-REPOSITORY] [LOKALER ORDNER]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 -fdlösche alle ungetrackten Dateien und Ordner aus dem Repository
git remote -vzeige Informationen zum verknüpften Remote-Repositories
git show originzeige ausführlichere Informationen zum verknüpften Remote-Repositories
git remote -vzeigt 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 [REMOTE-REPO SSH-URL]Ändern der Adresse zum Remote-Repository in lokalen Repo

3. Submodules

BefehlBeschreibung
git submodule add [URL ZUM GITHUB-REPOSITORY] [LOKALER ORDNER]downloade Repository in den angegeben Ordner
git submodule initnach dem Download muss das Modul initialisiert werden
git submodule updatenach der Initialisierung muss der Content in den Ordner gepullt werden
git submodule update -–recursive -–remote oder
git 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 true
git config submodule.recurse false
update alle Submodule bei jedem git pull mit (an/aus)
git pull --no-recurse-submodulesmain branch ohne alle Submodule pullen (einmalig)

4. Branches

BefehlBeschreibung
git branch -azeige alle lokalen Branches
git branch -rzeige 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 -—prunesynchronisiere Branch-Liste mit dem Online-Repository
git push origin --delete [REMOTE-BRANCHNAME]lösche Remote -Branch
git stash -uspeichere alle Änderungen lokal als stash (z.B. vor einem Wechsel des Branches)
git stash listzeige Liste von Stash-Einträgen
git stash poplade 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

BefehlBeschreibung
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~2letzten Zwei gemachten Commits löschen, aber Code nicht verändern
git revert HEAD~1macht letzten Commit rückgängig, durch neuen Commit mit exaktem Gegenteil
HEAD~3..HEAD = macht letzte drei Commits rückgängig
git logHistory aller Commits ausgeben
git log —-onelinegekürzte History aller Commits ausgeben
git log —first-parentzeigt nur Commits, die zum aktuellen Branch gehören
git log —- [FILENAME]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 stagengit add .
Commit erstellengit commit -m "[COMMIT-KOMMENTAR]"
nach main wechselngit switch main
remote/main pullengit pull
in Feature-Branch wechselngit 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 originlade 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. abc123git 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 änderngit reset .
Anderes Repo als Submodul hinzufügen:
SSH-Adresse des neuen Repos holen
cloned neues Repo an lokalen Pfadgit 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ügen
dann: comitten und pushen
git config --gobal submodule.all.ignore dirty
Submodul dauerhaft entfernen:
relevanten Part aus .gitmodules entfernen
Änderungen stagengit 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 erstellengit commit -m [COMMIT_MESSAGE]
Submodule-Ordner löschenrm -rf [PATH_TO_SUBMODULE]
Commit eventuell pushengit 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 Directoriesgit stash -u
in den Main wechselngit switch main
lokalen Main aktualisierengit pull
zurück in den Branch wechselngit switch [mein-branch]
rebased den Branch auf den neuen Stand des Maingit rebase main
lädt die ungetrackten Änderungen des Branchesgit stash pop