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
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
Links
Wie man einen guten commit schreiben
https://www.freecodecamp.org/news/how-to-write-better-git-commit-messages/amp