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?


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 .


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.


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).


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.


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).


4

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



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.