Git 2.23 wprowadza nowe polecenie git switch
- po przeczytaniu dokumentacji wydaje się być prawie takie samo, jak git checkout <branchname>
ktoś może wyjaśnić różnicę lub przypadek użycia?
Wprowadzono dwa nowe polecenia „git switch” i „git restore” w celu rozdzielenia „sprawdzania gałęzi, aby pracować nad rozwojem jej historii” i „sprawdzania ścieżek poza indeksem i / lub drzewem, aby pracować nad przyspieszeniem bieżącej history z jednego polecenia „git checkout”.
git
git-checkout
git-switch
Bastian Venthur
źródło
źródło
Odpowiedzi:
Cóż, zgodnie z dokumentacją, do której odsyłasz, jej jedynym celem jest podzielenie i wyjaśnienie dwóch różnych zastosowań
git checkout
:git switch
może teraz służyć do zmiany gałęzi, podobniegit checkout <branchname>
jakgit restore
może służyć do resetowania plików do pewnych wersji, podobniegit checkout --<path_to_file>
jakLudzie są zdezorientowani tymi różnymi sposobami korzystania
git checkout
, jak widać na podstawie wielu pytań dotyczącychgit checkout
tutaj w Stackoverflow. Wydaje się, że deweloperzy Git wzięli to pod uwagę.źródło
git checkout
Przełączyć gałąź?git checkout
Pobrać określoną wersję pliku?git checkout
Usunąć zmiany w jednym pliku?git checkout
Szczerze mówiąc, zastanawiam się, ile normalnego przepływu pracy gita można wykonać z różnymi flagamigit checkout
.git checkout
technicznego punktu widzenia nie jest już potrzebny? A może nadal jest używany do pewnych rzeczy, takich jak sprawdzanie zatwierdzenia, który nie jest odgałęzieniem (przejście do trybu „odłączonej głowy”)?-b
flagi. Nadal tworzy gałąź.checkout
operacja nie tworzy gałęzi, może jedynie przełączyć się do już istniejącej gałęzi.-b
Opcja docheckout
polecenia wewnętrznie wykonujegit branch
zanim faktycznie robi kasę. To jest to samo, cogit pull
jest skrótem dogit fetch
+git merge
.git checkout -b <branch name>
, możesz użyć,git switch -c <branch name>
aby uzyskać ten sam efektgit checkout
jest trochę szwajcarskim scyzorykiem, który ma kilka niepowiązanych zastosowań.Jeśli zmodyfikujesz plik, ale nie wprowadzisz zmiany do poczekalni, to
git checkout <filename>
odwrócisz modyfikacje ... szybki i łatwy sposób na anulowanie zmian w pliku. Pozostajesz w tej samej branży.git checkout <branchname>
(jak zauważyłeś) przełącza gałęzie.Dwa zupełnie różne cele, które mogą prowadzić do nieporozumień, jeśli nazwa pliku i nazwa gałęzi są podobne.
Posiadanie tego jako dwóch poleceń jest jaśniejsze.
źródło
git checkout <name>
daje pierwszeństwo gałęzi zamiast pliku.switch
ma pewne ograniczenia: w tej chwili możesz przełączyć się z dowolnego zatwierdzenia na<branch name>
, jednak niemożliwe jest przełączenie się z<branch name>
konkretnego zatwierdzenia ze statusem odłączonego HEAD . Musisz więc użyćgit checkout 5efb
(gdzie 5efb jest przykładem skrótu odniesienia do dowolnego zatwierdzenia)źródło
switch
jest tworzony wyłącznie w celu zmiany gałęzi, a kiedy to robisz, chcesz być na czele tej gałęzi.checkout
jest bardziej ogólną operacją, która dostosowuje twoją kopię roboczą do dowolnego stanu w historii (= zatwierdzenie). Ponieważ każda nazwa gałęzi jest aliasem dla zatwierdzenia HEAD tej gałęzi, sprawdzenie gałęzi nie różni się technicznie od sprawdzenia dowolnego innego zatwierdzenia.-d
tobą możesz:git switch -d 6c13