Git 2.23 führt einen neuen Befehl ein git switch
- nach dem Lesen der Dokumente scheint es so ziemlich dasselbe zu sein, wie git checkout <branchname>
kann jemand den Unterschied oder den Anwendungsfall erklären?
Zwei neue Befehle "git switch" und "git restore" werden eingeführt, um "Auschecken eines Zweigs zum Fortschreiten seines Verlaufs" und "Auschecken von Pfaden aus dem Index und / oder eines Baums zum Vorrücken des Stroms" aufzuteilen history "out of the single" git checkout "Befehl.
git
git-checkout
Bastian Venthur
quelle
quelle
Antworten:
Nun, gemäß der Dokumentation, auf die Sie verlinken, besteht der einzige Zweck darin, die zwei verschiedenen Verwendungszwecke von
git checkout
:git switch
kann jetzt verwendet werden, um Zweige zu ändern, wie esgit checkout <branchname>
tutgit restore
kann verwendet werden, um Dateien auf bestimmte Revisionen zurückzusetzen, ebenso wie dies dergit checkout --<path_to_file>
Fall istDie Menschen sind durch diese unterschiedlichen Verwendungsmöglichkeiten verwirrt
git checkout
, wie Sie aus den vielen Fragengit checkout
zu Stackoverflow hier ersehen können. Git-Entwickler scheinen dies berücksichtigt zu haben.quelle
git checkout
Zweig wechseln?git checkout
Eine bestimmte Version einer Datei erhalten?git checkout
Änderungen an einer Datei entfernen?git checkout
Ehrlich gesagt frage ich mich, wie viel vom normalen Git-Workflow mit verschiedenen Flags erledigt werden könntegit checkout
.git checkout
technisch für nichts mehr nötig? Oder wird es noch für bestimmte Dinge verwendet, z. B. zum Auschecken eines Commits, bei dem es sich nicht um einen Verzweigungskopf handelt (Wechseln in den Modus "Abgelöster Kopf")?git branch
. Das schafft jedoch nur den Zweig und wechselt nicht zu ihm (eine weitere besondere Entwurfsentscheidung). Wenn Sie in der neuen Niederlassung weiterarbeiten möchten, müssen Sie sich darauf einlassencheckout
. Es gibt die Option,checkout -b <branch name>
die eine Verknüpfung fürgit branch
+ istgit checkout
. Diecheckout
Operation erstellt jedoch technisch gesehen keinen neuen Zweig.-b
Flagge intern funktioniert . Es macht immer noch einen Zweig.checkout
Operation erstellt keinen Zweig, sondern kann nur in einen bereits vorhandenen Zweig wechseln. Die-b
Option für dencheckout
Befehl führt intern ein aus,git branch
bevor das Auschecken tatsächlich durchgeführt wird. Dies ist das gleiche wiegit pull
eine Verknüpfung fürgit fetch
+git merge
.git checkout
ist ein bisschen wie ein Schweizer Taschenmesser, das mehrere nicht verwandte Verwendungszwecke hat.Wenn Sie eine Datei ändern, die Änderung jedoch nicht bereitgestellt haben,
git checkout <filename>
werden die Änderungen rückgängig gemacht. Dies ist eine schnelle und einfache Möglichkeit, Änderungen an einer Datei abzubrechen. Sie bleiben in derselben Branche.git checkout <branchname>
(wie Sie bemerkt haben) wechselt die Zweige.Zwei völlig unterschiedliche Zwecke, die zu Verwirrung führen können, wenn ein Dateiname und ein Zweigname ähnlich sind.
Es ist klarer, es als zwei Befehle zu haben.
quelle
git checkout <name>
, wird der Zweig anstelle der Datei bevorzugt.switch
hat einige Einschränkungen: Im Moment wechseln kann von jeder verpflichten<branch name>
, aber es ist unmöglich, Schalter aus<branch name>
, um eine bestimmte mit dem Status begehen abgelöst HEAD . Sie müssen also verwendengit checkout 5efb
(wobei 5efb ein Beispiel für einen Hash-Verweis auf ein beliebiges Commit ist).quelle
switch
wird nur zum Ändern von Zweigen erstellt. Wenn Sie dies tun, möchten Sie sich am KOPF dieses Zweigs befinden.checkout
ist eine allgemeinere Operation, die Ihre Arbeitskopie mit einem bestimmten Status in der Historie in Einklang bringt (= Festschreiben). Da jeder Filialname ein Alias für das HEAD-Commit dieses Zweigs ist, unterscheidet sich das Auschecken eines Zweigs technisch nicht vom Auschecken eines anderen Commits.-d
Sie:git switch -d 6c13