Zum Hauptinhalt springen

Einführung in Git mit Git Bash

Git Allgemein

Was ist git?

  • Open Source Versionskontrolle
  • sehr schnell und effizient
    • kein Netzwerk erforderlich
  • große Verbreitung
    • große Community
    • GitHub sehr bekannt
  • Multi-platform
    • Linux
    • Mac
    • Windows
  • command-line basiert
    • gut für Automatisierung
    • scripting
  • integriert in vielen GUIs

Woher kommt git?

  • kommt aus dem Linux Umfeld
  • Entwickler: Linus Torvalds

Git Verzeichnis Struktur

  • Konfigurationen bleiben erhalten, wenn zu anderer Umgebung gewechselt wird

Grundlegendes Konzept

COMMIT

Snapshot der Repository

BRANCH

Ein Favorit der auf ein commit zeigt

TAG

Beschreibung für eine Sammlung von commits

Konzept für Zusammenarbeit

REMOTE

origin -> Ursprung

Lokale Kopie, Remote Host, Netzlaufwerk

CLONE

Kopie Repository von remote auf dem lokalen PC mit der History von git und alle commits

test

Philosophie

  • master / main branch
  • alles was im master branch ist deployable (einsetzbar)
    • getestet
  • Neue features, fixes werden in eigenem branch entwickelt
    • branch nach feature, fix benennen
  • häufig und früh commiten
    • so bleibt es nachvollziehbar
  • der lokale branch und remote branch sollten die selben Namen haben

Praxis

Git Config initialisieren

# config initialisieren
git config --global user.email "hoell@hl-dev.de"
git config --global user.name "David Höll"
# config prüfen

Vorbereitung, repository erstellen

cd /c/tmp
# Ordner erstellen
mkdir testDirectory
# zu Ordner navigieren
cd testDirectory
# Ordner im Explorer zeigen
# repository initialisieren
git init
# Ordner im Explorer zeigen
# .git Ordner -> config etc.

Zur Repository hinzufügen

# neue Datei mit Inhalt erstellen
echo "Hello this is my file" > myfile.txt
# Dateien zeigen
ls
# Status zeigen
git status
# myfile.txt -> wird noch nicht getrackt von git
# my file tracken
git add myfile.txt
# oder für alle Dateien im Ordner
git add .
# Status zeigen
git status
# myfile.txt wurde von workspace -> zur staging area verschoben
git commit -m "feat: create a new file for testing"
# Status zeigen
git status

Hilfe

# weitere Befehle anzeigen oder google benutzen
git help add
# myfile.txt zur repository hinzufügen

Veränderte Dateien

# Änderungen hinzufügen
echo "This is the second line in my testfile" >> "myfile.txt"
# Dateinhalt zeigen
cat myfile.txt
# Status zeigen
git status
# Änderungen in repository schreiben
git add .
git commit -m "feat: second test line in myfile"
# oder -am -> add, commit
git commit -am "feat: second test line in myfile"
# Status zeigen
git status

git history

# Historie anzeigen
git log
# Hilfe anzeigen
git help log
# z.B.:
git log --pretty=oneline

git checkout, reset

# Änderungen hinzufügen
echo "This is a bad line of code" >> "myfile.txt"
# Inhalt zeigen
cat myfile.txt
# Status zeigen
git status
# Workspace -> Staging
git add myfile.txt
git status
# Workspace <- STaging
git reset myfile.txt
git status
# file auf head setzen
git checkout myfile.txt
git status
# Inhalt zeigen
cat /myfile.txt

git reset --hard

# Änderungen hinzufügen
echo "This is a bad line of code" >> "myfile.txt"
# neue Dateien anlegen
touch test1.txt
touch test2.txt
git status
# Workspace (Alle Dateien) -> Staging
git add .
git status
# Head <- Staging (Alle Dateien)
git reset --hard
git status

git revert

  • Setzt den commit zurück
  • und erstellt einen neuen Commit
# Änderungen hinzufügen
echo "This is a bad line of code" >> "myfile.txt"
cat myfile.txt
# Workspache --> Repository
git commit -am "feat: This my new nice feature"
# history anzeigen
git log --pretty=oneline
# commit zurücknehmen über die commit id (kann in der history nachgeschaut werden)
git revert 18ab48a29693fb147337f5fbcd32cc2c238c6ebe
# in vim :wq zum schließen und speichern ausführen
cat myfile.txt
# history anzeigen
git log --pretty=oneline

git branch

branch basics

# branches zeigen
git branch
# neuen branch aus dem letzten commit des aktuellen branches erstellen
git branch mybranch
git branch
# branch wechseln
git checkout mybranch
git branch
git checkout master
# delete branch
git branch mybranch123
git branch
git branch -D mybranch123
git branch
# branch erstellen und direkt in branch wechseln
git checkout -b mybranch12345679
git branch

branch implement a feature

git checkout master
# file anlegen und commiten
echo "This is a bad line of code" >> "myfile.txt"
cat myfile.txt
git add .
git commit -m "feat: This my new nice feature"
git status
ls
# branch wechseln
git checkout -b feature/delete_file
ls
rm myfile.txt
ls
git add .
git commit -m "feat: delete my file."
# in master branch wechseln
git checkout master
ls
git checkout feature/delete_file
ls

merge a file

git checkout master
# neuen branch restellen
git checkout -b feature/add_files
# Dateien erstellen und commiten
touch myfile5.txt
touch myfile4.txt
touch myfile6.txt
ls
git add .
git status
git commit -m "feat: add 3 files"
# code review etc und dann in master mergen
git branch
git checkout master
ls
git merge feature/add_files
# History zeigen
git log

merge Konflikt

touch myfile9.txt
git add .
git commit -m "feat: add myfile9.txt to content"
# neunen branch erstellen
git branch feature/add_lines_of_code
# Änderungen im master branch durchführen
echo "This is the first line from master branch" >> myfile9.txt
git commit -am "feat: first line from master branch"
cat myfile9.txt
# branch wechseln
git checkout feature/add_lines_of_code
cat myfile9.txt
echo "This is the first line from feature/add_lines_of_code branch" >> myfile9.txt
git commit -am "feat: first line from feature/add_lines_of_code branch"
cat myfile9.txt
# in master branch wechseln
git checkout master
# Änderungen mergen und es kommt zum Konflikt
git merge feature/add_lines_of_code
git status
# VSCode oder Visual Studio verwenden um den Konflikt anzusehen
# z.B. Accept current changes
# commit via VSCode

git repository

leere git Repro anlegen

# Verzeichnis erstsellen
cd /c/tmp
mkdir gitRepro.git
# git Repro anlegen (!Kopieren in die Konsole ist nicht möglich)
git init –-bare gitRepro.git/
# Zum git Pfad wechseln
cd /c/tmp/testDirectory

pull, push, Repro hinzufügen

# git remote hinzufügen
git remote add origin /c/tmp/gitRepro.git
# zur Repro push
git push --set-upstream origin master
git push
# Auf Aktualisierungen prüfen
git fetch
# Aktualisierungen holen
git pull

repro klonen

cd /c/tmp
mkdir test2
cd test2
git clone /c/tmp/gitRepro.git
cd gitRepro
git status
ls

Wie man einen guten commit schreiben

https://www.freecodecamp.org/news/how-to-write-better-git-commit-messages/amp


Kommentare