Allgemeine Befehle
neues Repository anlegen
Commit wiederherstellen
Wird benutzt, um sich einen älteren Zustand anzuschauen (obwohl man weiß, wie der Code weiter verarbeitet wurde) Repository-History ausgeben
Commit abändern
Änderungen anzeigen
git diff <hash1> <hash2> Beispiel: Mit "git log --oneline" kann man die Historie sehen und nimmt sich dann zwei der linken ID's und fügt diese an die Stelle von hash1 und hash2 (Hash1 sollte am besten der Commit sein, der weiter in der Vergangenheit liegt) Änderungen durchführen
Mit "Commit" wird der Zustand des Projektes abgespeichert (quasi "Version") In Staging Are werden Commits vorbereitet Änderungen werden zunächst im working directors gelegt und müssen mit "git add" in die staging are gelegt werden In der staging area sammeln wir alle Änderungen die wir vornehmen möchten Mit "git commit" speichern wir diese Änderungen auch in das Repository (Best Practice: nur eine Änderung pro commit (ein Bug, ein neues Feature...) Änderungen zurücknehmen
HEAD
genutzt um z.B. statt: git diff 239f87 98237dc schreib man: git diff HEAD~2 HEAD Änderungen zwischenspeichern
Beispiel-Workflow: Du speicherst den Zustand im Stash, schaust dir einen alten Commit an, wechselst wieder zum aktuellen Stand, und liest den alten Zustand aus dem Stash aus Git Stash ist ein Last In First Out (Stack) git stash (sichert den aktuellen Stand vom working directory) git stash pop (stellt den letzten Stand vom working directory wieder her) git stash list (zeigt alle Stashes an) git diff stash (zeigt den diff des letzten Stashes an) Änderungen rückgängig machen
Würde man eine Sache löschen, auf den die anderen Commits aufbauen, dann würde es zu einem Konflikt führen => werden gefragt, ob wir sie wirklich löschen wollen (mit git reset --hard könnte man zu dem letzten commit springen und den aktuellen Löschvorgang beenden) Datei ignorieren
Änderungen an diesen Dateien haben dann keine Auswirkung auf git diff, git add, etc. .gitignore sollte mit commitet werden Bsp: - Datei mit Passwörter oder Liste an Pfaden die ignoriert werden sollen. - file/*.text würde bedeuten, dass alle .text Dateien in dem Ordner file ignoriert werden sollen https://github.com/github/gitignore ist eine Sammlung von möglichen .gitignore Dateien. (Aufpassen die Datei in.gitignore umbenennen) Datei löschen und umbenennen
um Datei richtig zu löschen (working directory und staging area) -> git rm datei.txt Datei umbenennen: - mv index.html index2.html würde dazu führen, dass die Datei nur kopiert wird und damit die ganze Historie von index.html ebenfalls verschwindet - richtig: *git mv index.html index2.html Git blame
git blame zeigt, wer welche Zeile geschrieben hat --color-lines führt dazu, dass gezeigt wird, welche Zeilen in einem commit hinzugefügt/geändert wurden BranchesGit Branches
"Branches" meint eine Verzweigung. Einer arbeitet an feature1 der andere an feature2, oder es wird in einer neuen branch ein Bug gefixt Wenn dann ein feature fertig ist, wird es an der master-branch gelegt Der * bei git branch zeigt an, in welchem branch man sich gerade befindet Genauso git log --online --graph --branches zeigt HEAD -> auf welchem Zweig man sich im Moment befindet Branches mergen (Fast-Forward-Merge)
fast-forward Merge: 1) git checkout master, da wir von master aus das neue feature holen 2) git merge feature, damit holen wir uns das feature 3) git log --oneline --branches, müsste jetzt (HEAD -> master, feature) ausgeben 3) git branch -d feature, das feature am besten nach dem Merge löschen 4) git log --online --branches, müsste jetzt (HEAD -> master) ausgeben (feature wurde hinzugefügt, jedoch sieht es aus, als hätte es ihn nie gegeben) Branches mergen (Three-Way-Merge)
Wenn kein Fast-Forward-Merge möglich ist, da in Master ebenfalls Änderungen statt fanden Three-Way-Merge 1) git log --oneline --branches --graph, Linien zeigen, was letzter gemeinsame Commit war & wie sich Pfad aufgeteilt hat 2) git checkout master, um in master zu wechseln 3) git merge <feature>, git erkennt, dass Three-Way-Merge gemacht werden muss und merged automatisch (Best Practice: Die Zeile "Merge branch 'feature' " so lassen, Zusatzkommentar ist möglich Merge-Konflikte behebenselben Befehle wie bei den Merge 1) Meldung, dass man den Konflikt manuell prüfen soll 2) wird gezeigt, welche Zeilen von welchem Commit kam 3) Code anpassen, Vorsicht!: Die Zeilen >>> HEAD, ... müssen gelöscht werden Branch aktuell halten
Die features werden nicht an dem älteren Branch, sondern an dem aktuellsten Branch gesetzt Merge-Strategien
NUR FAST-FORWARD-MERGE • Repository ist „in einem Strang“ • Dadurch einfach zu sehen, wie Änderungen aufeinander aufbauen NUR THREE-WAY-MERGE • Jedes Feature in eigenen Branch entwickelt • einfach zu sehen, wie welches Feature entwickelt wurde Git tag
Mit git tag kann man einen Release einer neuen Version markieren bei git log sieht man dann den tag GitHubRemote-Repository clonen
clone: 1) git clone https://... master ist dann unser lokales Repository origin/master ist unser remote Repository Remote-Workflow: fetch & pull
zeigt, ob im Repository Änderungen vorgenommen wurden - git fetch oder: - git log -- oneline --graph --branches zeigt den aktuellen Stand des lok Repository git log -- oneline --graph --branches origin/master zeigt den akt Stand des remote Repositories an um es zu mergen: git merge origin/master, Shortcut: git pull Einstieg in Github - Code auf GitHub laden1) Repository erstellen 2) git remote add origin https:// link zum repository 3) *git push -u origin master Änderungen zu GitHub übertragen1) git status => Ausgabe sollte sein: Auf Branch master Ihr Branch ist auf demselben Stand wie 'origin/master' 2) Bearbeite die Datei 3) git add datei.txt 4) git commit 5) git push (wenn jemand aber den origin/master ändert, dann kommt es zu Konflikten -> Pull-Requests) Änderungen übernehmen (Pull-Requests)1) git status wenn nicht auf akt Stand: git checkout master & git pull 2) git branch more-content & git checkout more-content (erstellt neue Branch und wechselt rein) 3) Datei bearbeiten & git add datei.txt & git commit 4) git checkout master & git pull 5) git checkout more-content ...6) git rebase master 7) git push -> Fehler, wenn more-content keinen Upstream-Branch => git push --set-upstream origin more-content => Jetzt Änderungen in neuen Branch 8) oben rechts auf Compare & pull request -> Änderungen von more-content in master gemerged 9) git checkout master & git pull(Aktuelle auch Lokal) GitHub Workflow: Readme & Markdown-DateiformatREADME.md # Überschrift 1.Ordnung ## Überschrift 2.Ordnung (bis 6) man kann die Wörter dick, kursiv, etc. formatieren Listen erstellen: mit Spiegelstrichen, oder nummeriert [link] (https:// wo führt der Link hin) GitHub Workflow: Issues & Pull-RequestsGenutzt, um zu schreiben, was geändert werden soll oder welcher Bug gefixt werden sollen Assignes und Labels können angepasst werden wie löse ich issues: git branch bg-fix, git checkout bg-fix, Datei ändern, git add datei.txt, git commit (mit "Fixes #Nummer" angeben, welches Issues gefixt, git push / ... --set-upstream..., Link kopieren um den Pull Befehl zu machen Wörter wie Fixes, Resloves, etc können benutzt werden GitHub Workflow: Collaborator hinzufügenWie füge ich jemanden zum Repository hinzu: Settings - Manage access - Invite a collaborator Um auf Master nicht mehr direkt commiten zu dürfen: Settings - Branches - (Branch protection rules) Add rule - Branch name pattern: "master" - Require pull request reviews before merging ... Fork & Pull-Requests; Fork RebasenGit BisectVerwendung: git bisect start git bisect bad [commit-id] git bisect good [commit-id] git bisect reset Häufigsten Befehle
|
Cheatography
https://cheatography.com
Git und GitHub Cheat Sheet (DRAFT) by Ghost 21
Git und GitHub (Udemy Kurs Git Komplettkurs: Vom Anfänger zum Profi (inkl. GitHub))
This is a draft cheat sheet. It is a work in progress and is not finished yet.