Jeder kann coden / Programmieren & TicTacToe
Quellcodeverwaltung mit GIT¶
Einleitung¶
Git ist ein Versionskontrollsystem. Es hilft dir, den Verlauf deines Codes oder Projekts zu speichern, Änderungen rückgängig zu machen und mit anderen zusammenzuarbeiten.
Stell dir Git wie ein „Zeitreise-Werkzeug“ für deinen Code vor – du kannst jederzeit sehen, wer was geändert hat und in welchem Zustand dein Projekt früher war.
Voraussetzungen¶
Du brauchst:
- Git installiert (Download hier)
- Ein Terminal (z. B. die Eingabeaufforderung auf Windows oder das Terminal auf macOS/Linux)
- Optional: Ein GitHub-Account (fĂĽr Online-Zusammenarbeit)
Typischer Ablauf bei der Arbeit mit Git¶
1. Ein Git-Repository erstellen¶
Du gehst in dein Projektverzeichnis und sagst Git: „Ich möchte, dass du ab jetzt dieses Projekt überwachst.“
git init
Dadurch wird ein versteckter .git
-Ordner angelegt, in dem Git alle Informationen speichert.
2. Dateien zum Commit vorbereiten¶
Git „beobachtet“ nicht automatisch alle Dateien. Du musst sagen, welche Dateien du sichern möchtest:
git add dateiname.txt
Oder alles auf einmal:
git add .
3. Änderungen speichern – Commit¶
Ein Commit ist ein Schnappschuss deines Projekts zu einem bestimmten Zeitpunkt.
git commit -m "Kurze Beschreibung der Änderung"
Beispiel:
git commit -m "FĂĽgt erste Version der Startseite hinzu"
4. Änderungen ansehen¶
Zeige dir an, was seit dem letzten Commit passiert ist:
git status
Oder die genaue Änderung:
git diff
Ein Projekt aus einem bestehenden Repository klonen¶
Wenn du mit einem bestehenden Git-Projekt arbeiten willst (z. B. von GitHub):
git clone https://github.com/username/repository.git
Dadurch wird das ganze Projekt lokal auf deinen Rechner kopiert.
Arbeiten mit GitHub (oder GitLab, etc.)¶
Wenn du deine Änderungen online speichern willst, brauchst du ein Remote-Repository.
1. GitHub-Repository anlegen (z. B. über die Webseite)¶
2. Repository verknüpfen:¶
git remote add origin https://github.com/deinname/projekt.git
3. Hochladen (Pushen):¶
git push -u origin main
Beim ersten Mal mit -u
, danach reicht:
git push
Änderungen herunterladen (Pull)¶
Wenn andere etwas verändert haben, kannst du dir die Änderungen holen:
git pull
Branches – parallele Entwicklungsstränge¶
Ein Branch ist wie ein „Alternativ-Zweig“ deines Projekts. Praktisch zum Testen neuer Features, ohne die Hauptversion zu verändern.
Branch erstellen:¶
git checkout -b neuer-branch
Zurück zum Haupt-Branch:¶
git checkout main
Änderungen zusammenführen:¶
git merge neuer-branch
Häufige Befehle auf einen Blick¶
Befehl | Bedeutung |
---|---|
git init |
Neues Git-Repo erstellen |
git add . |
Alle Änderungen zum Commit vormerken |
git commit -m "Nachricht" |
Änderungen speichern |
git status |
Aktuellen Stand prĂĽfen |
git log |
Chronik der Commits |
git clone URL |
Projekt herunterladen |
git push |
Änderungen hochladen |
git pull |
Änderungen herunterladen |
git checkout branchname |
Branch wechseln |
git merge branchname |
Branch zusammenfĂĽhren |
Bonus: Git einfach ausprobieren¶
Du kannst Git kostenlos im Browser ausprobieren – ohne Installation:
Git Konzepte, die hilfreich sind¶
1. .gitignore Datei¶
Manchmal willst du bestimmte Dateien nicht versionieren (z. B. temporäre Dateien, Log-Dateien, IDE-Dateien wie .vscode/
, node_modules
, bin/
, etc.).
Dazu legst du eine .gitignore
-Datei an:
# Beispiel .gitignore
*.log
*.tmp
node_modules/
.vscode/
Git ignoriert diese Dateien dann komplett.
2. Undo – Rückgängig machen¶
🔙 Letzten Commit rückgängig machen (aber Änderungen behalten)¶
git reset --soft HEAD~1
🔙 Letzten Commit rückgängig machen (Änderungen verwerfen!)¶
git reset --hard HEAD~1
⚠️ Achtung: --hard
ist wie „löschen & vergessen“ – mit Vorsicht benutzen!
🧽 Arbeitsverzeichnis zurücksetzen¶
git checkout -- datei.txt
Setzt datei.txt
auf den letzten gespeicherten Stand zurĂĽck.
3. Tags setzen (z. B. für Versionen)¶
git tag v1.0
git push origin v1.0
So kannst du z. B. Releases markieren.
4. Rebase statt Merge (für aufgeräumte Historien)¶
Ein merge
kombiniert zwei Zweige inklusive Merge-Commit. rebase
„setzt“ deine Änderungen auf eine neue Basis und hält die Historie linear.
git checkout feature
git rebase main
Danach:
git checkout main
git merge feature
5. Interaktives Rebase (Commits zusammenfassen oder umsortieren)¶
git rebase -i HEAD~3
Ă–ffnet eine Liste der letzten 3 Commits. Du kannst:
pick
→ so lassensquash
→ mit vorherigem Commit zusammenfassenreword
→ Commit-Nachricht ändern
6. Staging Area verstehen¶
Git hat drei „Zustände“:
- Working Directory → dein aktuelles Projektverzeichnis
- Staging Area (Index) → was du mit
git add
vorgemerkt hast - Repository (HEAD) → was du mit
git commit
gespeichert hast
Beispiel:
# du änderst eine Datei
# git weiĂź noch nichts davon
git status
# Datei erscheint als "modified"
git add datei.txt
# Datei kommt in die Staging Area
git commit -m "Update"
# Datei wird ins Repository geschrieben
SSH statt Passwort¶
Wenn du mit GitHub arbeitest, kannst du statt Benutzername/Passwort einen SSH-SchlĂĽssel verwenden:
ssh-keygen -t ed25519 -C "deinname@example.com"
Dann deinen öffentlichen Schlüssel (~/.ssh/id_ed25519.pub
) bei GitHub unter Settings > SSH Keys hinzufĂĽgen.
Danach kannst du klonen ĂĽber:
git clone git@github.com:benutzer/repo.git
Weitere Tools und Tipps¶
- Git GUI Tools: z. B. GitKraken, Sourcetree, GitHub Desktop
- Git Hooks: Automatisiere Prüfungen vor dem Commit (z. B. Linting)
- Aliase setzen:
git config --global alias.lg "log --oneline --graph"
Merksatz für die Praxis¶
Add → Commit → Push
Denke wie ein Autor: Entwürfe schreiben (add), speichern (commit), veröffentlichen (push)
Cheatsheet¶
Hier ist ein Git-Cheatsheet als übersichtliche Tabelle – ideal für Einsteiger und zum Nachschlagen:
Befehl | Beschreibung |
---|---|
git init |
Neues Git-Repository im aktuellen Ordner erstellen |
git clone <URL> |
Bestehendes Repository (z. B. von GitHub) klonen |
git status |
Zeigt Status der Arbeitsverzeichnisse und Staging Area |
git add <datei> |
Datei zur Staging Area hinzufĂĽgen |
git add . |
Alle Änderungen zur Staging Area hinzufügen |
git commit -m "Nachricht" |
Änderungen dauerhaft speichern (Commit) |
git log |
Liste der Commits anzeigen |
git diff |
Unterschiede seit letztem Commit anzeigen |
git branch |
Alle Branches anzeigen |
git branch <name> |
Neuen Branch erstellen |
git checkout <branch> |
Zu einem anderen Branch wechseln |
git checkout -b <branch> |
Branch erstellen und direkt wechseln |
git merge <branch> |
Änderungen von anderem Branch in aktuellen übernehmen |
git pull |
Änderungen vom Remote-Repository holen und integrieren |
git push |
Änderungen zum Remote-Repository hochladen |
git push -u origin <branch> |
Neuen Branch zum Remote hinzufĂĽgen |
git remote -v |
Zeigt verknĂĽpfte Remote-Repositories |
git remote add origin <URL> |
Remote-Repository hinzufĂĽgen |
git reset --soft HEAD~1 |
Letzten Commit rückgängig machen (Änderungen behalten) |
git reset --hard HEAD~1 |
Letzten Commit rückgängig machen (Änderungen verwerfen) |
git checkout -- <datei> |
Datei zurĂĽcksetzen (auf letzte Version) |
git stash |
Änderungen vorübergehend verstecken |
git stash pop |
Versteckte Änderungen wiederherstellen |
git tag v1.0 |
Tag (z. B. Version) setzen |
git rebase <branch> |
Änderungen auf anderen Branch „neu aufbauen“ |
git rebase -i HEAD~n |
Interaktives Rebase der letzten n Commits |
git config --global user.name "Name" |
Git-Nutzername global festlegen |
git config --global user.email "Email" |
Git-E-Mail global festlegen |
git config --global alias.st status |
Alias erstellen (hier: git st = git status ) |
Übung¶
Da das Verzeichnis notebooks/tools/sandbox
Teil eines bereits bestehenden Git-Repositories ist, solltest du kein git init
darin ausfĂĽhren, sondern innerhalb dieses Subverzeichnisses arbeiten, ohne ein neues Repository zu initialisieren.
Hier probieren wir die Git-Befehle aus, um:
- alle Git-Befehle lokal im Verzeichnis
notebooks/tools/sandbox
wirken, - der bestehende Git-Kontext genutzt wird,
- keine Störungen für das Hauptrepo auftreten.
# Gehe in das Unterverzeichnis, falls nötig
%cd notebooks/tools/sandbox
# Bestehende Datei löschen (falls vorhanden, damit es "frisch" ist)
!rm -f projekt.md
# Neue Projektdatei anlegen
%%writefile projekt.md
# Unser Projekt
Dieses Projekt dokumentiert die Zusammenarbeit im Team mit Git.
# Datei zur Staging Area hinzufĂĽgen und initial committen
!git add projekt.md
!git commit -m "Initiale Projektbeschreibung" --no-verify
# Neuen Branch "alice" erstellen und wechseln
!git checkout -b alice
# Alice ergänzt den Zielbereich
%%writefile projekt.md
# Unser Projekt
Dieses Projekt dokumentiert die Zusammenarbeit im Team mit Git.
## Ziel
Ein Werkzeug fĂĽr Nachhaltigkeit entwickeln.
# Commit auf alices Branch
!git add projekt.md
!git commit -m "Alice ergänzt den Zielbereich" --no-verify
# ZurĂĽck zu main und neuen Branch "bob" erstellen
!git checkout main
!git checkout -b bob
# Bob bearbeitet dieselbe Stelle auf seine Weise
%%writefile projekt.md
# Unser Projekt
Dieses Projekt dokumentiert die Zusammenarbeit im Team mit Git.
## Ziel
Eine Anwendung fĂĽr Umweltbildung erstellen.
# Commit auf bobs Branch
!git add projekt.md
!git commit -m "Bob ergänzt eine alternative Zielbeschreibung" --no-verify
# ZurĂĽck zu main und merge von Alice (funktioniert)
!git checkout SoSe25
!git merge alice
# Merge von Bob versuchen – das erzeugt den Konflikt!
!git merge bob || echo "đź’Ą Merge-Konflikt erkannt!"
# Konflikt zeigen
!cat projekt.md
Jetzt kannst du manuell im Notebook den Konflikt in
projekt.md
auflösen.
Manuelle Konfliktlösung¶
%%writefile projekt.md
# Unser Projekt
Dieses Projekt dokumentiert die Zusammenarbeit im Team mit Git.
## Ziel
Ein Werkzeug fĂĽr Umweltbildung und Nachhaltigkeit entwickeln.
# Konflikt beheben & Commit
!git add projekt.md
!git commit -m "Konflikt manuell gelöst – Ziel kombiniert" --no-verify
# Git-Log mit Verlauf anzeigen
!git log --oneline --graph --all
Hinweis:
Falls das Haupt-Repository Hooks oder Commit-Policies hat, kannst du --no-verify
verwenden, damit es im Notebook nicht zu AbbrĂĽchen kommt.