Как `git checkout -` работает на низком уровне

Как я могу получить предыдущую ветку / коммит, используя команды Git или файлы состояния?

Изменить: Вопрос - как я могу получить эту информацию (предыдущую ветку или фиксацию) без выполнения реальной проверки? Это необходимо для инструмента, который работает поверх Git, а не для обычного сценария Git.

1 ответ

Решение

Взглянув на код:

if (!strcmp(arg, "-"))
    arg = "@{-1}";

Способ доступа к ранее извлеченным ветвям документирован в редакции документа на @{-n}

Теперь, чтобы решить имя ветви позади @{-n}решение git check-ref-format --branch:

С --branch опция, он расширяет "предыдущий синтаксис ветви" @{-n}, Например, @{-1} способ сослаться на последнюю ветку, на которой вы были. Эта опция должна быть использована фарфорами для принятия этого синтаксиса везде, где ожидается имя ветви, поэтому они могут действовать так, как если бы вы ввели имя ветви.

$ git check-ref-format --branch @{-1}
my_branch
$ git check-ref-format --branch @{-2}
master

Также есть git rev-parse --symbolic-full-name решение:

$ git rev-parse --symbolic-full-name @{-1}
refs/heads/my_branch
$ git rev-parse --symbolic-full-name @{-2}
refs/heads/master
Другие вопросы по тегам