fristy/GIT_WORKFLOW.md

7.3 KiB

Git Workflow Guide

Branch-Strategie

Main Branches

main (production)
└── develop (development)
  • main: Produktions-Branch, immer stabil und deploybar
  • develop: Entwicklungs-Branch, Integration aller Features

Supporting Branches

Feature Branches

feature/feature-name

Von: develop Merge zu: develop

Beispiele:

  • feature/user-authentication
  • feature/contract-crud
  • feature/dashboard-stats

Release Branches

release/v1.0.0

Von: develop Merge zu: main und develop

Verwendung:

  • Vorbereitung eines neuen Releases
  • Bug-Fixes für das Release
  • Version-Bumps
  • CHANGELOG aktualisieren

Hotfix Branches

hotfix/critical-bug-name

Von: main Merge zu: main und develop

Verwendung:

  • Kritische Bugs in Production
  • Schnelle Fixes ohne auf Release zu warten

Workflow-Prozess

1. Neues Feature entwickeln

# Von develop starten
git checkout develop
git pull origin develop

# Feature-Branch erstellen
git checkout -b feature/mein-feature

# Entwickeln...
git add .
git commit -m "feat(module): beschreibung"

# Push zum Remote
git push origin feature/mein-feature

# Pull Request erstellen auf GitHub/GitLab
# Nach Review: Merge zu develop

2. Release vorbereiten

# Release-Branch erstellen
git checkout develop
git checkout -b release/v0.2.0

# Version bumpen
npm run release:minor

# Oder manuell:
# - package.json version aktualisieren
# - CHANGELOG.md aktualisieren
# - iOS/Android Versions aktualisieren

git push origin release/v0.2.0

# Nach Tests: Merge zu main und develop
git checkout main
git merge release/v0.2.0
git tag -a v0.2.0 -m "Release v0.2.0"
git push origin main --tags

git checkout develop
git merge release/v0.2.0
git push origin develop

# Release-Branch löschen
git branch -d release/v0.2.0

3. Hotfix durchführen

# Hotfix-Branch erstellen
git checkout main
git checkout -b hotfix/critical-login-bug

# Fix implementieren
git add .
git commit -m "fix(auth): resolve critical login issue"

# Version bumpen (PATCH)
npm run release:patch

# Push
git push origin hotfix/critical-login-bug

# Merge zu main
git checkout main
git merge hotfix/critical-login-bug
git tag -a v0.2.1 -m "Hotfix v0.2.1"
git push origin main --tags

# Merge zu develop
git checkout develop
git merge hotfix/critical-login-bug
git push origin develop

# Hotfix-Branch löschen
git branch -d hotfix/critical-login-bug

Commit-Guidelines

Format

type(scope): subject

[optional body]

[optional footer]

Types

  • feat: Neues Feature
  • fix: Bugfix
  • docs: Dokumentation
  • style: Code-Formatierung
  • refactor: Code-Refactoring
  • perf: Performance-Optimierung
  • test: Tests
  • build: Build-System
  • ci: CI/CD
  • chore: Sonstiges (Dependencies, etc.)
  • revert: Revert eines Commits

Scope

Module/Bereich des Projekts:

  • auth
  • contracts
  • dashboard
  • notifications
  • profile
  • ui
  • api
  • store

Subject

  • Imperativ, präsens: "add" nicht "added" oder "adds"
  • Kein Punkt am Ende
  • Kleinbuchstaben
  • Max. 50 Zeichen

Beispiele

# Gute Commits
git commit -m "feat(auth): add login screen with email validation"
git commit -m "fix(contracts): resolve date parsing error"
git commit -m "docs(readme): update installation instructions"
git commit -m "refactor(store): simplify contract selectors"
git commit -m "perf(dashboard): optimize contract list rendering"

# Breaking Change
git commit -m "feat(api)!: change authentication flow

BREAKING CHANGE: New auth flow requires token refresh"

# Mit Body
git commit -m "fix(auth): prevent duplicate login requests

Added debouncing to login button to prevent
multiple simultaneous requests"

Pull Request Process

1. PR erstellen

## Beschreibung
Kurze Beschreibung der Änderungen

## Typ der Änderung
- [ ] Bugfix
- [ ] Neues Feature
- [ ] Breaking Change
- [ ] Dokumentation

## Checklist
- [ ] Code folgt Projekt-Style-Guide
- [ ] Tests hinzugefügt/aktualisiert
- [ ] Dokumentation aktualisiert
- [ ] CHANGELOG.md aktualisiert
- [ ] Keine Merge-Konflikte

2. Review-Prozess

  1. CI/CD-Pipeline muss grün sein
  2. Code-Review von mindestens 1 Entwickler
  3. Alle Kommentare müssen aufgelöst sein
  4. Keine Breaking Changes ohne Diskussion

3. Merge-Strategie

Feature → Develop:

  • Squash & Merge (alle Commits zu einem zusammenfassen)

Release/Hotfix → Main:

  • Merge Commit (History beibehalten)

Tagging

Format

v{MAJOR}.{MINOR}.{PATCH}[-{PRE-RELEASE}]

Beispiele

# Production Releases
git tag -a v1.0.0 -m "Release v1.0.0"
git tag -a v1.1.0 -m "Release v1.1.0 - Added export feature"
git tag -a v1.1.1 -m "Hotfix v1.1.1 - Fixed critical bug"

# Pre-Releases
git tag -a v1.0.0-alpha.1 -m "Alpha Release 1"
git tag -a v1.0.0-beta.1 -m "Beta Release 1"
git tag -a v1.0.0-rc.1 -m "Release Candidate 1"

# Push tags
git push origin --tags

Nützliche Git-Befehle

Branch-Management

# Alle Branches anzeigen
git branch -a

# Remote-Branches aktualisieren
git fetch --prune

# Branch löschen
git branch -d branch-name
git push origin --delete branch-name

# Zu anderem Branch wechseln
git checkout branch-name
git switch branch-name  # neuer Befehl

Änderungen verwalten

# Status anzeigen
git status

# Änderungen stagen
git add .
git add file.txt

# Commit erstellen
git commit -m "message"

# Letzten Commit ändern
git commit --amend

# Änderungen verwerfen
git restore file.txt
git restore .

History

# Log anzeigen
git log
git log --oneline
git log --graph --oneline --all

# Unterschiede anzeigen
git diff
git diff branch1 branch2

Rebase (vorsichtig verwenden!)

# Feature-Branch mit develop synchronisieren
git checkout feature/mein-feature
git rebase develop

# Interaktives Rebase (Commits aufräumen)
git rebase -i HEAD~3

Best Practices

DO

  • Regelmäßig commits machen
  • Aussagekräftige Commit-Messages
  • Feature-Branches aktuell halten (regelmäßig von develop pullen)
  • Pull Requests klein halten (< 400 Zeilen)
  • Tests vor dem Push ausführen
  • Code-Reviews ernst nehmen

DON'T

  • Direkt auf main/develop pushen
  • Force-Push auf shared branches
  • Große Binary-Dateien committen
  • Secrets/API-Keys committen
  • Merge-Konflikte ignorieren
  • WIP-Commits ohne aufräumen

Automatisierung

Husky Hooks

Pre-Commit:

  • Linting
  • Formatierung
  • Tests

Commit-Msg:

  • Commit-Message-Validierung

Pre-Push:

  • Tests
  • Build

GitHub Actions

CI (Pull Requests):

  • Linting
  • Type-Checking
  • Tests
  • Build

Release (main branch):

  • Automatisches Versioning
  • CHANGELOG generieren
  • GitHub Release erstellen
  • NPM Publish (optional)

Troubleshooting

Merge-Konflikte

# Konflikt anzeigen
git status

# Datei manuell editieren und Konflikt-Marker entfernen
# <<<<<<<, =======, >>>>>>>

# Nach dem Lösen
git add conflicted-file.txt
git commit

Commit rückgängig machen

# Letzten Commit rückgängig (Änderungen behalten)
git reset --soft HEAD~1

# Letzten Commit rückgängig (Änderungen verwerfen)
git reset --hard HEAD~1

# Commit revert (neuer Commit)
git revert HEAD

Branch wiederherstellen

# Gelöschten Branch finden
git reflog

# Branch wiederherstellen
git checkout -b recovered-branch <commit-hash>