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?
^
) 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^"
Odpowiedzi:
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 odHEAD^1
i możesz również adresowaćHEAD^2
i 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ładmaster~2
oznacza 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ą GitHEAD^
iHEAD~
w niej?Aby uzyskać szczegółowe informacje, zobacz sekcję „Określanie wersji” w witrynie
git rev-parse --help
.źródło
HEAD^^^
zwraca trzecie starsze zatwierdzenie, tj. Jest równoważneHEAD~~~
?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.źródło
^
(Daszek) mogą również być stosowane, gdy określenia zakresów .źródło
Oto wizualne wyjaśnienie. Załóżmy, że masz taką historię:
Kiedy element został scalony z wzorcem,
C
został utworzony z dwoma przodkami. Git przypisuje numery tym przodkom. Przodkowi głównej liniiB
przypisuje się 1, a przodkowi elementuF
- 2.W ten sposób
C^1
odnosi się doB
iC^2
odnosi się doF
.C^
jest aliasem dlaC^1
.Używałbyś tylko
<rev>^3
. jeśli wykonałeś połączenie trzech gałęzi.źródło
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).źródło
Karat reprezentuje przesunięcie zatwierdzenia (rodzic). Na przykład
HEAD^
oznacza „jedno zatwierdzenie z HEAD”, aHEAD^^^
oznacza „trzy zatwierdzenia z HEAD”.źródło
(^) Pobiera macierzyste źródło polecenia, tj. HEAD ^ pobiera rodzica HEAD.
źródło
Greg Bacon podał świetne łącze, ale jest dość gęste. Dokumentacja wprowadzająca do Git online zawiera również wprowadzenie do wersji i specyfikatorów zakresu:
https://git-scm.com/book/en/v2/Git-Tools-Rvision-Selection
źródło