Поиск…


замечания

Многие команды Git принимают параметры ревизии в качестве аргументов. В зависимости от команды они обозначают конкретную фиксацию или, для команд, которые ходят по графику ревизии (например, git-log (1) ), все коммиты, которые могут быть достигнуты из этой фиксации. Они обычно обозначаются как <commit> , или <rev> или <revision> в описании синтаксиса.

Справочной документацией для синтаксиса редакций Git является справочная страница gitrevisions (7) .

Все еще отсутствует на этой странице:

  • [_] Выход из git describe , например, v1.7.4.2-679-g3bee7fb
  • [_] @ как ярлык для HEAD
  • [_] @{-<n>} , например @{-1} , и - значение @{-1}
  • [_] <branchname>@{push}
  • [_] <rev>^@ , для всех родителей <rev>

Требуется отдельная документация:

  • [_] Ссылаясь на blobs и деревья в репозитории и в индексе: <rev>:<path> и :<n>:<path> синтаксис
  • Диапазоны пересмотра, такие как A..B , A...B , B ^A , A^1 , и ограничение пересмотра, такое как -<n> , - --since

Указание ревизии по имени объекта

$ git show dae86e1950b1277e545cee180551750029cfe735
$ git show dae86e19

Вы можете указать ревизию (или, по правде говоря, любой объект: тег, дерево, т.е. содержимое каталога, blob, т.е. содержимое файла), используя имя объекта SHA-1, либо полную 40-байтную шестнадцатеричную строку, либо подстроку, которая уникальна для репозитория.

Символьные имена ссылок: ветви, теги, ветви удаленного отслеживания

$ 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'

Вы можете указать ревизию с использованием символьного имени ref, которое включает в себя ветви (например, «master», «next», «maint»), теги (например, «v1.0», «v0.6.3-rc2») (например, «origin», «origin / master») и специальные ссылки, такие как «HEAD» для текущей ветви.

Если символическое имя ссылки неоднозначно, например, если у вас есть как ветка, так и тег с именем «fix» (с веткой и тегом с тем же именем не рекомендуется), вам нужно указать тип ссылки, которую вы хотите использовать:

$ git show heads/fix      # or 'refs/heads/fix', to specify branch
$ git show tags/fix       # or 'refs/tags/fix', to specify tag

Версия по умолчанию: HEAD

$ git show         # equivalent to 'git show HEAD'

«HEAD» называет фиксацию, на которой вы основываете изменения в рабочем дереве, и обычно является символическим именем для текущей ветви. Многие (но не все) команды, для которых параметр ревизии по умолчанию имеет значение «HEAD», если он отсутствует.

Ссылки Reflog: @ { }

$ git show @{1}            # uses reflog for current branch
$ git show master@{1}      # uses reflog for branch 'master'
$ git show HEAD@{1}        # uses 'HEAD' reflog

Ссылка, обычно ветка или HEAD, за которой следует суффикс @ с порядковой спецификацией, заключенной в пару скобок (например, {1} , {15} ), указывает n-ое предшествующее значение этого ref в вашем локальном репозитории . Вы можете проверить последние записи reflog с git reflog команды git reflog или --walk-reflogs / -g для 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

Примечание : использование журналов практически заменило старый механизм использования ORIG_HEAD ref (примерно эквивалентный HEAD@{1} ).

Ссылки Reflog: @ { }

$ git show master@{yesterday}
$ git show HEAD@{5 minutes ago}   # or HEAD@{5.minutes.ago}

Ссылка, за которой следует суффикс @ с спецификацией даты, заключенной в пару скобок (например, {yesterday} , {1 month 2 weeks 3 days 1 hour 1 second ago} или {1979-02-26 18:30:00} ) указывает значение ref в предшествующий момент времени (или ближайшая точка к нему). Обратите внимание, что это просматривает состояние вашего локального ref в данный момент времени; например, то, что было на вашем местном «хозяине» на прошлой неделе.

Вы можете использовать git reflog с спецификатором даты, чтобы найти точное время, когда вы сделали что-то, чтобы дать ref в локальном репозитории.

$ 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

Отслеживаемый / восходящий филиал: @ {Вверх}

$ git log @{upstream}..       # what was done locally and not yet published, current branch
$ git show master@{upstream}  # show upstream of branch 'master'

Суффикс @{upstream} добавленный к branchname (короткая форма <branchname>@{u} ), относится к ветке, которую ветвь, указанная branchname, устанавливается на вершину (настроена с помощью branch.<name>.remote и branch.<name>.merge , или с git branch --set-upstream-to=<branch> ). Отсутствует branchname по умолчанию для текущего.

Вместе с синтаксисом для диапазонов ревизий очень полезно видеть, что ваша ветка впереди вверх (коммиты в вашем локальном репозитории еще не представлены вверх по течению), и что заставляет вас отстать (совершает восходящий поток, не объединенный в локальную ветвь), или и то и другое:

$ git log --oneline @{u}..
$ git log --oneline ..@{u}
$ git log --oneline --left-right @{u}...  # same as ...@{u}

Целевая цепочка: ^, ~ , так далее.

$ git reset --hard HEAD^             # discard last commit
$ git rebase --interactive HEAD~5    # rebase last 4 commits

Суффикс ^ к параметру ревизии означает первый родитель этого объекта фиксации. ^<n> означает <n> -й родительский элемент (т. е. <rev>^ эквивалентен <rev>^1 ).

Суффикс ~<n> к параметру ревизии означает объект commit, который является предком n-го поколения именованного объекта commit, следуя только первым родителям. Это означает, что, например, <rev>~3 эквивалентно <rev>^^^ . В качестве ярлыка <rev>~ означает <rev>~1 и эквивалентно <rev>^1 или <rev>^ вкратце.

Этот синтаксис является составным.


Чтобы найти такие символические имена, вы можете использовать команду git name-rev :

$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940

Обратите внимание, что в следующем примере необходимо использовать --pretty=oneline и not --oneline

$ 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

Развертывание разделов и тегов: ^ 0, ^ { }

В некоторых случаях поведение команды зависит от того, задано ли ей имя ветки, имя тега или произвольная ревизия. Вы можете использовать синтаксис «de-referencing», если вам нужен последний.

Суффикс ^ за которым следует имя типа объекта ( tag , commit , tree , blob ), заключенное в пару скобок (например, v0.99.8^{commit} ), означает разыменование объекта в <rev> рекурсивно, пока объект типа <type> или объект не может быть разыменован. <rev>^0 является короткой рукой для <rev>^{commit} .

$ git checkout HEAD^0    # equivalent to 'git checkout --detach' in modern Git

Суффикс ^ за которым следует пустая фигурная скобка (например, v0.99.8^{} ), означает разыменование тега рекурсивно до тех пор, пока не будет найден объект без тегов.

сравнить

$ git show v1.0
$ git cat-file -p v1.0
$ git replace --edit v1.0

с

$ git show v1.0^{}
$ git cat-file -p v1.0^{}
$ git replace --edit v1.0^{}

Наименьшая согласованная фиксация: ^ {/ },: /

$ git show HEAD^{/fix nasty bug}   # find starting from HEAD
$ git show ':/fix nasty bug'       # find starting from any branch

Двоеточие (' : '), за которым следует слэш (' / '), за которым следует текст, называет коммит, чье сообщение фиксации соответствует указанному регулярному выражению. Это имя возвращает самую младшую совпадающую фиксацию, доступную из любого ref. Регулярное выражение может соответствовать любой части сообщения фиксации. Чтобы сопоставить сообщения, начинающиеся со строки, можно использовать, например :/^foo . Специальная последовательность :/! зарезервирован для модификаторов к тому, что соответствует. :/!-foo выполняет отрицательное совпадение, а :/!!foo соответствует литералу! символ, за которым следует foo .

Суффикс ^ к параметру ревизии, за которым следует пара скобок, содержащая текст, приводимый косой чертой, совпадает с синтаксисом :/<text> ниже, который возвращает младшую согласованную фиксацию, доступную от <rev> до ^ .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow