Co oznacza znak daszka (^)?

125

Widziałem tutaj odpowiedź na pytanie , które pomaga przywrócić usunięty plik w git.

Rozwiązaniem było

git checkout <deleting_commit>^ -- <deleted_file_path>

Co robi znak daszka ( ^)? Widziałem to gdzie indziej, robiąc bardzo przydatne rzeczy w git. To jest magiczne. Niech ktoś mi to zepsuje i powiedz mi, co robi?

Charles Ma
źródło
9
FYI w systemie Windows: ^ nie działa zgodnie z oczekiwaniami w powłoce DOS. Użyj powłoki git bash i wtedy zadziała.
Cincinnati Joe
5
Nie przyszło mi to nawet do głowy, kiedy próbowałem go użyć (zgadując, co to oznacza). Daszek ( ^) to znak ucieczki w cmd.exe. Za każdym razem, gdy próbowałem go użyć, aby sprawdzić, czy będzie to pomocne, w rzeczywistości nic nie przekazywałem, co wyjaśnia, dlaczego wyniki nigdy nie były różne. > _> Głupi cmd.exe. Możesz od tego uciec, podwajając lub cytując: git log master^^lubgit log "master^"
bambams

Odpowiedzi:

138

HEAD^ oznacza pierwszego rodzica końcówki bieżącej gałęzi.

Pamiętaj, że zatwierdzenia git mogą mieć więcej niż jednego rodzica. HEAD^jest skrótem od HEAD^1i możesz również adresować HEAD^2i tak dalej, jeśli to konieczne.

Możesz dotrzeć do rodziców dowolnego zobowiązania, nie tylko HEAD. Możesz także cofnąć się przez pokolenia: na przykład master~2oznacza dziadka wierzchołka gałęzi głównej, faworyzując pierwszego rodzica w przypadku niejasności. Te Specyfikatory mogą być dowolnie łączone, na przykład , topic~3^2. Zobacz powiązaną odpowiedź na temat Jaka jest różnica między usługą Git HEAD^i HEAD~w niej?

Aby uzyskać szczegółowe informacje, zobacz sekcję „Określanie wersji” w witryniegit rev-parse --help .

Greg Bacon
źródło
1
Ale w takim razie, w historii liniowej, dlaczego HEAD^^^zwraca trzecie starsze zatwierdzenie, tj. Jest równoważne HEAD~~~?
Vorac
1
@Vorac Jeśli chodzi o historię linearną, tak.
Greg Bacon,
21

To znaczy „rodzic”. Czyli HEAD^oznacza „rodzica aktualnej HEAD”. Możesz nawet połączyć je ze sobą: HEAD^^oznacza „rodzic rodzica bieżącej HEAD” (tj. Dziadek aktualnej HEAD), HEAD^^^oznacza „rodzic rodzica rodzica aktualnego HEAD” i tak dalej.

mipadi
źródło
16

^(Daszek) mogą również być stosowane, gdy określenia zakresów .

Aby wykluczyć zatwierdzenia osiągalne z zatwierdzenia, używana jest notacja przedrostkowa ^ . Np. ^ R1 r2 oznacza zatwierdzenia osiągalne z r2, ale wyklucza te osiągalne z r1.

<rev>

Uwzględnij zatwierdzenia, które są osiągalne z (tj. Przodków).

^ <rev>

Wyklucz zatwierdzenia, które są osiągalne z (tj. Przodków).

cmcginty
źródło
10

Oto wizualne wyjaśnienie. Załóżmy, że masz taką historię:

                      master  
  ... <- B <- C <- D
             /
... <- E <- F
              feature

Kiedy element został scalony z wzorcem, Czostał utworzony z dwoma przodkami. Git przypisuje numery tym przodkom. Przodkowi głównej linii Bprzypisuje się 1, a przodkowi elementu F- 2.

W ten sposób C^1odnosi się do Bi C^2odnosi się do F. C^jest aliasem dla C^1.

Używałbyś tylko <rev>^3. jeśli wykonałeś połączenie trzech gałęzi.

cdosborn
źródło
7

Daszek odnosi się do rodzica określonego zatwierdzenia. Np. HEAD^Odnosi się do rodzica aktualnego polecenia HEAD. (również HEAD^^odnosi się do dziadków).

mopoke
źródło
4

Karat reprezentuje przesunięcie zatwierdzenia (rodzic). Na przykład HEAD^oznacza „jedno zatwierdzenie z HEAD”, a HEAD^^^oznacza „trzy zatwierdzenia z HEAD”.

Bursztyn
źródło
4

(^) Pobiera macierzyste źródło polecenia, tj. HEAD ^ pobiera rodzica HEAD.

WYSOKI CHŁOPAK
źródło