Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
git [2018/11/10 11:24] root [Checkout] |
git [2022/02/07 21:50] (aktuell) root [pull] |
||
---|---|---|---|
Zeile 51: | Zeile 51: | ||
* der Head-Pointer existiert nur einmal pro git-Projekt und verweist immer auf das aktuelle (gewählte, muss nicht das letzte sein) commit im aktuellen Branch | * der Head-Pointer existiert nur einmal pro git-Projekt und verweist immer auf das aktuelle (gewählte, muss nicht das letzte sein) commit im aktuellen Branch | ||
* der Inhalt des Working Directory und der Commit auf den der Head-Pointer verweist stimmen immer überein | * der Inhalt des Working Directory und der Commit auf den der Head-Pointer verweist stimmen immer überein | ||
+ | |||
+ | |||
+ | ===== Remote ===== | ||
+ | |||
+ | * Remote-Repositories sind Repositories in die hochgeladen werden kann | ||
+ | * sie sind eine " | ||
+ | * sie müssen nicht alle Branches enthalten die auch lokal vorhanden sind | ||
+ | * Remote-References sind Pointer auf bestimmte Objekte im Remote-Repository | ||
+ | * Branches, Tags usw. | ||
+ | * sie können aufgelistet werden mit remote show | ||
+ | |||
+ | |||
+ | |||
+ | * Remote-Tracking-Branches sind Pointer die auf den Commit Remote zeigen an dem das letzte Mal mit dem jeweiligen Remote-Branch kommuniziert wurde (fetch, pull, push) | ||
+ | * Remote-Tracking-Branches haben die Form: | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | * Remote steht dabei für den Namen des Remote-Repository (git remote show) | ||
+ | * Branch ist der Name des Branches | ||
+ | * man kann für ein Repository auch mehrere Remote-Tracking-Branches haben | ||
+ | * macht man ein pull gegen eines und dies hat einen älteren Stand als man selbst (weil das zweite Remote-Repository einen neueren Stand hat) wird nur der Remote-Tracking-Pointer für das mit dem älteren Stand auf den neuesten Commit den es hat gesetzt - ansonsten passiert nichts (es wird nicht automatisch upgedated, man bekommt auch keine Daten -> da man eh neuere hat) | ||
+ | * push ist einfach -> git push < | ||
+ | * neues Repository pushen (welches noch nicht Remote vorhanden ist): git push < | ||
+ | * soll das Repository remote unter einem anderen Namen erscheinen: git push < | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Zeile 256: | Zeile 286: | ||
* Remote ist das Kürzel des Repositories von dem heruntergeladen wird | * Remote ist das Kürzel des Repositories von dem heruntergeladen wird | ||
+ | |||
+ | |||
+ | * Die Option " | ||
+ | * das heißt die Änderungen von Remote werden nicht nach den lokalen Commits hinzugefügt, | ||
+ | | ||
+ | |||
Zeile 352: | Zeile 388: | ||
===== Branch ===== | ===== Branch ===== | ||
- | * Anzeigen, Löschen und Anlegen von Branches | + | * Anzeigen, Löschen und Anlegen, Verwalten |
Zeile 361: | Zeile 397: | ||
Der Branch mit dem führenden * ist der aktuelle (im Working-Directory befindliche) Branch | Der Branch mit dem führenden * ist der aktuelle (im Working-Directory befindliche) Branch | ||
+ | \\ \\ | ||
Branche erstellen: | Branche erstellen: | ||
Zeile 368: | Zeile 404: | ||
</ | </ | ||
Obiges erstellt einen neuen Branch basierend auf dem aktuellen Head (dem Stand der durch das letzte Commit im aktuellen Branch entstandenn ist) unter dem angegebenen Namen. \\ **Achtung: | Obiges erstellt einen neuen Branch basierend auf dem aktuellen Head (dem Stand der durch das letzte Commit im aktuellen Branch entstandenn ist) unter dem angegebenen Namen. \\ **Achtung: | ||
+ | \\ \\ | ||
Branch umbenennen: | Branch umbenennen: | ||
< | < | ||
git branch -m <Alter Name> <Neuer Name> | git branch -m <Alter Name> <Neuer Name> | ||
- | </git> | + | </code> |
-m steht für move. | -m steht für move. | ||
+ | \\ \\ | ||
Branch löschen: | Branch löschen: | ||
Zeile 381: | Zeile 417: | ||
git branch -d < | git branch -d < | ||
</ | </ | ||
+ | \\ \\ | ||
+ | |||
+ | Letzten Commit für alle Branches anzeigen: | ||
+ | < | ||
+ | git branch -v | ||
+ | </ | ||
+ | \\ \\ | ||
+ | |||
+ | Alle gemergten Branches anzeigen (alle die die auf den gleichen Commit zeigen - dazu zählen auch die die noch gar nicht geändert wurden): | ||
+ | < | ||
+ | git branch --merged | ||
+ | </ | ||
+ | \\ \\ | ||
+ | Alle nicht gemergten Branches anzeigen (alle die nicht auf den gleichen Commit wie der aktuelle Branch) zeigen: | ||
+ | < | ||
+ | git branch --no-merged | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Checkout ===== | ||
+ | |||
+ | * Definiert welcher Stand im Working-Directory angezeigt wird | ||
+ | * man Kann Branches oder bestimmte commits " | ||
+ | |||
+ | |||
+ | Branch auschecken: | ||
+ | < | ||
+ | git checkout < | ||
+ | </ | ||
+ | Mit dem auschecken eines Branches wird dieser der aktive Branch - anschließende Commits werden in diesen gemacht | ||
+ | \\ \\ | ||
+ | Commit auschecken: | ||
+ | < | ||
+ | git checkout < | ||
+ | </ | ||
+ | |||
+ | **Achtung: | ||
+ | |||
+ | Commit auschecken und neuen Branch mit diesem Beginnen: | ||
+ | < | ||
+ | git checkout -b < | ||
+ | </ | ||
+ | In diesem Fall wird auch gleich in den entsprechenden Branch gewechselt | ||
+ | |||
+ | |||
+ | |||
+ | ===== Merge ===== | ||
+ | |||
+ | * Überführt die Änderungen eines Branches in die eines anderen - häufig einen " | ||
+ | * Dabei wird in den Branch gemerged in dem man sich aktuell befindet | ||
+ | * befindet man sich in master und merged patch58, dann werden die Änderungen aus Branch " | ||
+ | |||
+ | |||
+ | Syntax: | ||
+ | < | ||
+ | git merge < | ||
+ | </ | ||
+ | |||
+ | Es kann passieren das es einen Merge-Konflikt gibt, weil einige Dateien in beiden Branches geändert wurden vor der Zusammenführung. \\ | ||
+ | In diesem Fall schlägt das mergen fehl, die entsprechenden Dateien enthalten an den Stellen wo es den Konflikt gibt entsprechende Markierungen und den Inhalt beider Dateien. \\ | ||
+ | Nach dem sich für eine der beiden Versionen entschieden wurde oder eine ganz neue Lösung gefunden wurde, müssen die Markierungen und der überflüssige Code gelöscht werden, danach wird normal commited. | ||
+ | |||
+ | |||
+ | ===== mergetool ===== | ||
+ | |||
+ | * Damit kann bei merge-Konflikten ein Werkzeug (welches nicht Teil von git ist, sondern konfiguriert werden muss) aufgerufen werden um merge-Konflikte zu lösen | ||
+ | |||
+ | Syntax: | ||
+ | < | ||
+ | git mergetool | ||
+ | </ | ||
+ | |||
Zeile 386: | Zeile 495: | ||
* | * | ||
+ | |||
+ | |||
+ | ===== Rebase ===== | ||
+ | |||
+ | * Ändert die Git-History | ||
+ | |||
+ | * Wenn sich remote etwas geändert hat, kann der Remote-Stand untergehoben werden (aktueller, noch nicht gepushter Commit wird gestashed, die Änderung aus einem anderen Branch (aktueller Stand) eingespielt und die gestashten Änderungen als letzter Commit oben drauf gesetzt) | ||
+ | * noch nicht gepushte Commits können nachträglich bearbeitet werden | ||
+ | * zusammengeführt werden (squash) | ||
+ | * Änderungen vorgenommen werden | ||
+ | |||
+ | ==== Squash ==== | ||
+ | |||
+ | * Zusammenführen mehrerer (ungepushter) Commits zu einem | ||
+ | |||
+ | < | ||
+ | git rebase -i < | ||
+ | </ | ||
+ | |||
+ | Basis: | ||
+ | |||
+ | * meint alle Commits nach dem als Basis angegeben Commit stehen als Edit zur Verfügung | ||
+ | * HEAD~[Anzahl Commits zurück] -> nimm den Commit x Commit zurück als Basis | ||
+ | * < | ||
+ | * < | ||
+ | |||
+ | * Im sich öffnenden Editor alle Edits die mit dem letzten (oberster Eintrag) zusammengeführt werden sollen mit dem Keyword squash versehen (anstatt von pick) | ||
+ | * Editor mit schreiben beenden | ||
+ | |||
+ | |||
+ | |||