Подтвердить что ты не робот

Что такое Git Expression Expression?

Итак, я использую Git GUI для создания репозитория. Но я не могу найти ЛЮБОЙ след в Google, Документации или где-либо еще, что такое "Ревизионное выражение", и требуется создать новый Branch.

Кроме того, похоже, что это используется во многих других местах в программе, поэтому я считаю, что важно знать.

Я нашел вопрос об этом в StackOverflow, но парень так и не получил ответа.

Мне просто нужно знать: что такое выражение редакции?

4b9b3361

Ответ 1

git должен быть способен идентифицировать фиксацию во время ряда общих операций

Существует несколько способов идентификации фиксации. Вы можете использовать ветку, тег, commit sha1 или выражения. Например:

git log HEAD

HEAD в конечном итоге разрешает конкретную фиксацию, и вам будет предоставлен журнал для этого. Вы также можете сказать:

git log master

master - это ветвь, которая также будет разрешена для конкретной фиксации.

git log fd72e9c99312

Теперь, когда это действительная фиксация.


Ниже приведена документация, которую вы ищете. Взято из документации команды git-rev-parse в http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html.

УКАЗАНИЕ РЕВИЗИОНОВ

Параметр ревизии обычно, но необязательно, называет объект фиксации. Они используют так называемый расширенный синтаксис SHA1. Вот несколько способов задать имена объектов. Список, указанный в конце этого списка, - это имя деревьев и блоков, содержащихся в фиксации.

Полное имя объекта SHA1 (40-байтная шестнадцатеричная строка) или подстрока такого, которая уникальна в репозитории. Например. dae86e1950b1277e545cee180551750029cfe735 и dae86e оба называют один и тот же объект фиксации, если в вашем репозитории нет объекта, чье имя объекта начинается с dae86e.

Выход из git -describe; т.е. ближайший тег, необязательно сопровождаемый тире и числом коммитов, за которым следует тире, g и сокращенное имя объекта.

Символическое имя ссылки. Например. master обычно означает объект фиксации, на который ссылается $GIT_DIR/refs/heads/master. Если у вас есть обе головки/мастер и теги/мастер, вы можете прямо сказать головам/мастерам, чтобы сообщить git, что вы имеете в виду. При двусмысленности a устраняется неоднозначно, принимая первое совпадение в следующих правилах:

если существует $GIT_DIR/, это то, что вы имеете в виду (обычно это полезно только для HEAD, FETCH_HEAD, ORIG_HEAD и MERGE_HEAD);

в противном случае $GIT_DIR/refs/if существует;

в противном случае $GIT_DIR/refs/tags/if существует;

в противном случае $GIT_DIR/refs/heads/if существует;

в противном случае $GIT_DIR/refs/remotes/if exists;

иначе, $GIT_DIR/refs/remotes//HEAD, если существует.

HEAD называет фиксацию изменений в рабочем дереве. FETCH_HEAD записывает ветку, которую вы извлекли из удаленного репозитория, с помощью последнего вызова git -fetch. ORIG_HEAD создается командами, которые перемещают ваш HEAD резким способом, чтобы записать положение HEAD перед их работой, так что вы можете сменить кончик ветки обратно в состояние, прежде чем легко их запустить. MERGE_HEAD записывает фиксации, которые вы объединяете в свою ветку, когда вы запускаете git -merge.

Ссылка, за которой следует суффикс @с спецификацией даты, заключенной в пару скобок (например, {вчера}, {1 месяц 2 недели 3 дня 1 час 1 секунду назад} или {1979-02-26 18:30:00 }), чтобы указать значение ref в предыдущий момент времени. Этот суффикс может использоваться только сразу после имени ref, и ref должен иметь существующий журнал ($ GIT_DIR/logs/). Обратите внимание, что это просматривает состояние вашего локального ref в данный момент времени; например, то, что было на вашем местном филиале на прошлой неделе. Если вы хотите посмотреть на фиксации, сделанные в определенное время, см. --since и --until.

Ссылка, за которой следует суффикс @с порядковой спецификацией, заключенной в пару скобок (например, {1}, {15}), чтобы указать n-ое предыдущее значение этого ref. Например, master @{1} - это непосредственное предшествующее значение мастера, тогда как master @{5} является пятым предшествующим значением мастера. Этот суффикс может использоваться только сразу после имени ref, и ref должен иметь существующий журнал ($ GIT_DIR/logs/).

Вы можете использовать конструкцию @с пустой частью ref, чтобы получить в reflog текущей ветки. Например, если вы находитесь на ветке blabla, то @{1} означает то же, что и blabla @{1}.

Специальный конструкт @{-} означает, что ветвь проверена до текущей.

Суффикс ^ к параметру ревизии означает первый родитель этого объекта фиксации. ^ означает, что th родитель (т.е. rev ^ эквивалентен rev ^ 1). В качестве специального правила rev ^ 0 означает само коммит и используется, когда rev - это имя объекта объекта тега, относящегося к объекту фиксации.

Суффикс ~ к параметру ревизии означает объект фиксации, который является родоначальником th поколения именованного объекта commit, после только первого родителя. То есть rev ~ 3 эквивалентно rev ^^^, что эквивалентно rev ^ 1 ^ 1 ^ 1. Ниже приведен пример использования этой формы.

Суффикс ^, за которым следует имя типа объекта, заключенное в пару фигурных скобок (например, v0.99.8 ^ {commit}), означает, что объект может быть тегом и разыменовать тег рекурсивно до тех пор, пока не будет найден объект этого типа или объект больше не могут быть разыменованы (в этом случае barf). rev ^ 0, введенный ранее, является короткой для rev ^ {commit}.

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

Двоеточие, за которым следует косая черта, а затем текст: это имя коммит, чье сообщение фиксации начинается с указанного текста. Это имя возвращает самую младшую совпадающую фиксацию, доступную из любого ref. Если сообщение фиксации начинается с символа!, Вы должны повторить это; специальная последовательность:/!, за которой следует что-то еще! зарезервировано на данный момент.

Суффикс: за ним следует путь; это называет blob или дерево по заданному пути в древовидном объекте, названном частью перед двоеточием.

Двоеточие, необязательно сопровождаемое номером этапа (от 0 до 3) и двоеточием, за которым следует путь; это называет объект blob в индексе на указанном пути. Отсутствующий номер этапа (и двоеточие, который следует за ним) называет запись этапа 0. Во время слияния этап 1 является общим предком, второй этап - версией целевой ветки (как правило, текущей ветвью), а этап 3 - это версия из ветки, которая объединяется.

Вот иллюстрация, сделанная Джоном Лолигером. Оба узла фиксации B и C являются родителями commit node A. Родительские коммиты упорядочены слева направо.

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A
A =      = A^0
B = A^   = A^1     = A~1
C = A^2  = A^2
D = A^^  = A^1^1   = A~2
E = B^2  = A^^2
F = B^3  = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2  = B^^2    = A^^^2  = A~2^2
I = F^   = B^3^    = A^^3^
J = F^2  = B^3^2   = A^^3^2

Ответ 2

gahooa дает исчерпывающий ответ. Общий случай:

  • Имя существующей ветки (например, master)
  • Первые несколько цифр контрольной суммы SHA1, наилучшим образом взятые из gitk или git log

Добро пожаловать в чудесный мир git. TMI является номиналом для курса...

Ответ 3

В другом случае при использовании Emacs: просто введите Ctrl-x v l, чтобы перечислить все версии. Для новичков git (но не для Emacs/CVS) я был удивлен, увидев, что изменения перечислены как:

commit 8d5ab12cd76d5e6098e5894c8713ec605fd9f153

Это определенно освежающее изменение в нотации Major.minor.bugfix.build.

Что еще (приятно) удивительно, так это то, что Emacs автоматически обрабатывает git, не требуя, чтобы я рассказывал ему (через .emacs), что ему нужно ссылаться на git вместо CVS. Довольно удивительно.

Итак, чтобы суммировать, когда Emacs запрашивает ревизию, просто введите 40 шестнадцатеричных цифр.