Das lokale Verzeichnis c:\develop\my_project
soll auf dem NAS verfügbar gemacht werden. Die Freigabe der NAS ist als Laufwerk X:\ eingebunden.
Im ersten Schritt die Quelle vorbereiten. Es wird eine Kopie vom aktuellen lokalen Repositiory ohne Arbeitsverzeichnis erzeugt. Die Kopie wird auf das NAS verschoben.
cd c:\develop git clone --bare my_project my_project.git xcopy my_project.git x:\repros\my_project.git /S /E rd my_project.git /S /Q |
Abschließend wird das lokale Arbeitsverzeichnis mit dem neue Repositiory für den gemeinsamen Austausch verbunden.
cd c:\develop\my_project git remote add origin x:\repros\my_project.git git remote -v git remote show origin |
Nun können Änderungen auf dem NAS veröffentlicht werden.
cd c:\develop\my_project git status git commit -am "my important comment" git log -1 git show-branch *master git push origin master |
Diff
# Änderungen prüfen git diff --check # Anderungen zwischen zwei Commits git diff --oneline fe3105f 36ef02d abc.txt # Änderungen zum Parent git show --color --pretty=format:%b XXXXXX git diff-tree -p XXXXXX gitk ..feature-abc |
siehe auch Git-Referenz in Bildern
Taggen
git tag -a v0.2 -m "Version 2020/08, Abc, Def" git push origin --tags git tag -l # Ausgabe mit Message git tag -n1 # Message ändern git tag eva85 eva85^{} -f -m "Tomcat 8.5" git show v0.2 # delete tag git tag -d v0.2 git push origin --delete v0.2 |
siehe auch Erklärung im Grundlagen-Kapitel
Alias
aufwendige Parameterketten zusammenfassen/verinfachen
# mit Git git config --global alias.lg "log --all --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" git lg # per Bash alias gl="git log --pretty=format:'%C(auto)%h%C(blue) %<|(19)%as%C(auto)%d %s'" |
Zeilenende
automatische Ersetzung ausschalten (ggf. VSCode Strg+P „Change End of Line sequence“)
git config --global core.autocrlf false |
siehe auch Git Zeilenenden, empfohlen wird \n
stash
# Halt work on the branch feature-X git stash git checkout -b feature-Y origin/main # Hack, hack, hack… git checkout feature-X or git switch - git stash pop # Resume work on feature-X |
siehe auch 4 tips for context switching in Git
git stash list git stash show stash@{1} git stash show -p stash@{1} git diff stash@{1}^! git stash apply stash@{1} |
fetch
# zum Branch wechseln git switch main # Branch aktualisieren git fetch # Änderungen anschauen git log --oneline origin/main # ...oder nur Neues git log --oneline main..origin/main |
siehe auch Git Fetch: Definition & Examples
Branches
# Branch "develop" erstellen und aktivieren git checkout -b develop # alle Branches zeigen git branch -avv # Remote-Branch holen git checkout --track origin/newsletter # einzelne Datei aus Branch feature-xyz übernehmen git show feature-xyz:docs/demo.txt git switch master git checkout --patch feature-xyz docs/demo.txt # Branch "master" öffnen und "develop" einarbeiten git checkout master git merge develop # Branch "develop" löschen git branch -d develop git push origin --delete origin/develop git fetch --prune # lists branches merged into master git branch --merged master |
Mit for branch in `git branch -r --merged | grep -v HEAD`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | sort -r
werden die Branches und ihre Autoren aufgelistet.
Commit aus Master in neuen Branch
# neuen Branch anlegen (Code aktuell im Master) git branch new-feed # einen Commit den Master zurücksetzen (statt 1 auch ander Schrittzahl möglich) git reset --hard HEAD~1 # zum neuen Branch wechseln (geschriebener Code kommt im neuen Branch an) git checkout new-feed |
Commit aus Master in bestehenden Branch
# zum bestehenden Branch wechseln git checkout feed-exists # alle Commits vom Master übernehmen git merge master # zum Master wechseln und diesen zurücksetzen (einen oder mehrere Commits) git checkout master git reset --hard HEAD~1 |
Repo bereinigen
# lokale Verweise nach Merge löschen git remote prune origin # interne Repräsnetation neu aufbauen git repack # interne Repräsentation aufräumen git prune-packed # Refs/Commits ohne Zugriff älter 2 Wochen entfernen git gc --aggressive |
Sonstiges
git config --global user.name "Karl Mustermann" git config --global user.email karl@mustermann.de # git config --global --edit git commit --amend --reset-author |
# SSL-Prüfung deaktivieren git -c http.sslVerify=false push |
siehe https://stackoverflow.com
# Änderung ohne Commit (vor Stage) rückgängig machen git checkout -- hosts.txt # lokale Änderungen zurücksetzen (-n ist Vorschau) git fetch origin git reset --hard origin/master git clean -n -f # eine Vaiable im Arbeitsverzeichnis abfragen git config --get --bool core.bare # Änderung im Arbeitsverzeichnis rückgangig machen git reset hosts.txt # mit erstem Push den Upstream konfigurieren # im Anschluss nur noch: git push git push --set-upstream origin master # Benutzer nachträglich ändern git config --global --edit git commit --amend --reset-author # Wartung durchführen git count-objects -v git fsck --full git gc --auto git remote set-url origin https://git.meine.de/ich/REPO.git git pull origin master --allow-unrelated-histories # Dateien vom Commit git show --pretty="" --name-only 16f0 # Repo durchsuchen git rev-list --all | xargs git grep -F 'dbtool' # Repo aufräumen git gc --prune=now --aggressive # Commits zählen git rev-list --count feature-fa |
siehe auch: Git version control with Eclipse (EGit), A guide to Git… oder How to fix a broken repository?