Git
Składnia wersji Git
Szukaj…
Uwagi
Wiele poleceń Git przyjmuje parametry rewizji jako argumenty. W zależności od polecenia oznaczają określone zatwierdzenie lub, w przypadku poleceń, które przechodzą przez wykres wersji (takich jak git-log (1) ), wszystkie zatwierdzenia, które można uzyskać z tego zatwierdzenia. Zazwyczaj są one oznaczone w opisie składni jako <commit> , <rev> lub <revision> .
Dokumentacja referencyjna dla składni wersji Git to strona podręcznika gitrevisions (7) .
Wciąż brakuje na tej stronie:
- [_] Dane wyjściowe z
git describe, np.v1.7.4.2-679-g3bee7fb - [_]
@sam jako skrót doHEAD - [_]
@{-<n>}, np.@{-1}, i-co oznacza@{-1} - [_]
<branchname>@{push} - [_]
<rev>^@, dla wszystkich rodziców<rev>
Potrzebuje osobnej dokumentacji:
- [_] Odnosząc się do obiektów blob i drzew w repozytorium i indeksie:
<rev>:<path>i:<n>:<path>składnia - [_] Zakresy Weryfikacja jak
A..B,A...B,B ^A,A^1, jak i zmiany granicznej-<n>,--since
Określanie wersji według nazwy obiektu
$ git show dae86e1950b1277e545cee180551750029cfe735
$ git show dae86e19
Możesz określić wersję (lub w rzeczywistości dowolny obiekt: znacznik, drzewo, tj. Zawartość katalogu, obiekt blob, tj. Zawartość pliku), używając nazwy obiektu SHA-1, pełnego 40-bajtowego ciągu szesnastkowego lub podłańcucha, który jest unikalny dla repozytorium.
Symboliczne nazwy referencyjne: gałęzie, tagi, gałęzie zdalnego śledzenia
$ git log master # specify branch
$ git show v1.0 # specify tag
$ git show HEAD # specify current branch
$ git show origin # specify default remote-tracking branch for remote 'origin'
Możesz określić wersję za pomocą symbolicznej nazwy ref, która obejmuje gałęzie (na przykład „master”, „next”, „Maintenance”), tagi (na przykład „v1.0”, „v0.6.3-rc2”), zdalne- śledzenie gałęzi (na przykład „origin”, „origin / master”) oraz specjalne referencje, takie jak „HEAD” dla bieżącej gałęzi.
Jeśli symboliczna nazwa odwołania jest niejednoznaczna, na przykład jeśli masz gałąź i znacznik o nazwie „fix” (nie zaleca się posiadania gałęzi i znacznika o tej samej nazwie), musisz określić rodzaj odwołania, którego chcesz użyć:
$ git show heads/fix # or 'refs/heads/fix', to specify branch
$ git show tags/fix # or 'refs/tags/fix', to specify tag
Wersja domyślna: HEAD
$ git show # equivalent to 'git show HEAD'
„HEAD” nazywa zatwierdzenie, na podstawie którego dokonano zmian w drzewie roboczym, i jest zwykle nazwą symboliczną dla bieżącej gałęzi. Wiele (ale nie wszystkie) poleceń, które przyjmują parametr zmiany domyślnie na „HEAD”, jeśli go brakuje.
Referencje referencji: @ { }
$ git show @{1} # uses reflog for current branch
$ git show master@{1} # uses reflog for branch 'master'
$ git show HEAD@{1} # uses 'HEAD' reflog
Ref, zazwyczaj gałąź lub HEAD, po którym następuje sufiks @ ze specyfikacją porządkową zawartą w parze nawiasów klamrowych (np. {1} , {15} ) określa n-tą poprzednią wartość tego ref w twoim lokalnym repozytorium . Możesz sprawdzić ostatnie wpisy --walk-reflogs polecenia git reflog --walk-reflogs lub opcji --walk-reflogs / -g , aby uzyskać git log .
$ git reflog
08bb350 HEAD@{0}: reset: moving to HEAD^
4ebf58d HEAD@{1}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{2}: pull: Fast-forward
f34be46 HEAD@{3}: checkout: moving from af40944bda352190f05d22b7cb8fe88beb17f3a7 to master
af40944 HEAD@{4}: checkout: moving from master to v2.6.3
$ git reflog gitweb-docs
4ebf58d gitweb-docs@{0}: branch: Created from master
Uwaga : używanie reflogów praktycznie zastąpiło starszy mechanizm wykorzystywania ref ORIG_HEAD (w przybliżeniu równoważny HEAD@{1} ).
Referencje referencji: @ { }
$ git show master@{yesterday}
$ git show HEAD@{5 minutes ago} # or HEAD@{5.minutes.ago}
Ref, po którym następuje sufiks @ ze specyfikacją daty zawartą w parze nawiasów klamrowych (np. {yesterday} , {1 month 2 weeks 3 days 1 hour 1 second ago} lub {1979-02-26 18:30:00} ) określa wartość referencji we wcześniejszym momencie (lub najbliższym jej punkcie). Zauważ, że to sprawdza stan twojego lokalnego ref w danym momencie; np. co było w twoim lokalnym oddziale „master” w zeszłym tygodniu.
Możesz użyć git reflog ze specyfikatorem daty, aby sprawdzić dokładny czas, w którym zrobiłeś coś dla danego ref w lokalnym repozytorium.
$ git reflog HEAD@{now}
08bb350 HEAD@{Sat Jul 23 19:48:13 2016 +0200}: reset: moving to HEAD^
4ebf58d HEAD@{Sat Jul 23 19:39:20 2016 +0200}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{Sat Jul 23 19:26:43 2016 +0200}: pull: Fast-forward
Oddział śledzony / wyjściowy: @{pod prąd}
$ git log @{upstream}.. # what was done locally and not yet published, current branch
$ git show master@{upstream} # show upstream of branch 'master'
Przyrostek @{upstream} dołączony do nazwy gałęzi (skrócona <branchname>@{u} ) odnosi się do gałęzi, na którą gałąź określona przez nazwę gałęzi ma być zbudowana na górze (skonfigurowana z branch.<name>.remote i branch.<name>.merge lub z git branch --set-upstream-to=<branch> ). Brakująca nazwa gałęzi jest domyślnie ustawiona na bieżącą.
W połączeniu ze składnią zakresów rewizji bardzo przydatne jest zobaczenie zatwierdzeń, które twój oddział wyprzedza w górę (zatwierdzenia w lokalnym repozytorium jeszcze nie są obecne w górę), oraz jakie zatwierdzenia jesteś za (zatwierdzenia w górę nie są scalone z lokalnym oddziałem), lub obie:
$ git log --oneline @{u}..
$ git log --oneline ..@{u}
$ git log --oneline --left-right @{u}... # same as ...@{u}
Zatwierdź łańcuch przodków: ^, ~ itd.
$ git reset --hard HEAD^ # discard last commit
$ git rebase --interactive HEAD~5 # rebase last 4 commits
Przyrostek ^ do parametru zmiany oznacza pierwszego rodzica tego obiektu zatwierdzenia. ^<n> oznacza <n> -tego rodzica (tj. <rev>^ jest równoważne <rev>^1 ).
Przyrostek ~<n> do parametru rewizji oznacza obiekt zatwierdzenia, który jest przodkiem nazwanego obiektu zatwierdzenia <n> -tej generacji, podążając tylko za pierwszymi rodzicami. Oznacza to, że na przykład <rev>~3 jest równoważne <rev>^^^ . Jako skrót, <rev>~ oznacza <rev>~1 i jest równoważne z <rev>^1 lub <rev>^ w skrócie.
Ta składnia jest możliwa do skomponowania.
Aby znaleźć takie symboliczne nazwy, możesz użyć polecenia git name-rev :
$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940
Zauważ, że --pretty=oneline a nie --oneline należy użyć w poniższym przykładzie
$ git log --pretty=oneline | git name-rev --stdin --name-only
master Sixth batch of topics for 2.10
master~1 Merge branch 'ls/p4-tmp-refs'
master~2 Merge branch 'js/am-call-theirs-theirs-in-fallback-3way'
[...]
master~14^2 sideband.c: small optimization of strbuf usage
master~16^2 connect: read $GIT_SSH_COMMAND from config file
[...]
master~22^2~1 t7810-grep.sh: fix a whitespace inconsistency
master~22^2~2 t7810-grep.sh: fix duplicated test name
Dereferencing gałęzi i tagów: ^ 0, ^ { }
W niektórych przypadkach zachowanie polecenia zależy od tego, czy nadano mu nazwę gałęzi, nazwę znacznika, czy dowolną wersję. Możesz użyć składni „usuwania odnośników”, jeśli potrzebujesz tej drugiej.
Sufiks ^ po którym następuje nazwa typu obiektu ( tag , commit , tree , obiekt blob ) zawarty w parze nawiasów klamrowych (na przykład v0.99.8^{commit} ) oznacza dereferencję obiektu w <rev> rekurencyjnie aż do obiektu typu <type> został znaleziony lub obiekt nie może być już wyrejestrowany. <rev>^0 to skrót dla <rev>^{commit} .
$ git checkout HEAD^0 # equivalent to 'git checkout --detach' in modern Git
Sufiks ^ po którym następuje pusta para nawiasów klamrowych (na przykład v0.99.8^{} ) oznacza rekurencyjne v0.99.8^{} znacznika, dopóki nie zostanie znaleziony obiekt inny niż znacznik.
Porównać
$ git show v1.0
$ git cat-file -p v1.0
$ git replace --edit v1.0
z
$ git show v1.0^{}
$ git cat-file -p v1.0^{}
$ git replace --edit v1.0^{}
Najmłodsze pasujące zatwierdzenie: ^ {/ },: /
$ git show HEAD^{/fix nasty bug} # find starting from HEAD
$ git show ':/fix nasty bug' # find starting from any branch
Dwukropek („ : ”), po którym następuje ukośnik („ / ”), po których następuje tekst, zatwierdza nazwę, której komunikat zatwierdzenia pasuje do określonego wyrażenia regularnego. Ta nazwa zwraca najmłodsze pasujące zatwierdzenie, które jest dostępne z dowolnego numeru referencyjnego. Wyrażenie regularne może pasować do dowolnej części komunikatu zatwierdzenia. Aby dopasować wiadomości zaczynające się od łańcucha, można użyć np . :/^foo . Specjalna sekwencja :/! jest zarezerwowany dla modyfikatorów tego, co jest dopasowane. :/!-foo wykonuje dopasowanie negatywne, podczas gdy :/!!foo dopasowuje literał! znak, a następnie foo .
Sufiks ^ do parametru rewizji, po którym następuje para nawiasów zawierających tekst prowadzony ukośnikiem, jest taki sam, jak składnia :/<text> poniżej, że zwraca najmłodsze pasujące zatwierdzenie, które jest dostępne z <rev> przed ^ .