Есть ли способ git проверить предыдущую ветку?

Мне нужен эквивалент cd - для git. Если я нахожусь в ветке master, и я проверяю foo, мне бы хотелось набрать что-то вроде git checkout -, чтобы вернуться к master и снова ввести его, чтобы вернуться к foo.

Есть ли что-нибудь подобное? Было бы трудно реализовать?

Ответ 1

Из примечания к выпуску для 1.6.2

@{-1} - это способ ссылаться на последнюю ветку, в которой вы были. Это
принимается не только там, где ожидается имя объекта, но и где угодно имя ветки ожидается и действует так, как будто вы набрали имя ветки.
Например. git branch --track mybranch @{-1}, git merge @{-1} и
git rev-parse --symbolic-full-name @{-1} будет работать как ожидалось.

и

git checkout - является сокращением для git checkout @{-1}.

Ответ 2

Самый простой способ сделать это сейчас:

git checkout -

... который является псевдонимом:

git checkout @{-1}

git checkout минус

Если вы хотите узнать больше об этом, я написал здесь всю статью: Оформить покупку Предыдущая ветвь В Git.

Ответ 3

Как указывает @Karl и из руководства git checkout:

В качестве специального случая синтаксис "@{- N}" для проверки последней ветки N-й (вместо отсоединения). Вы также можете указать - синонимом "@{- 1}".

Таким образом, оба git checkout - и git checkout @{-1} будут работать в этом случае

Ближе всего я полагаю, что использую git reflog и анализирую последние moving from branch1 to branch2 и git checkout branch1

Ответ 4

Просто добавьте более подробную информацию к предыдущим ответам, чтобы понять механизм, с помощью которого работает git checkout @{-N}. Он просматривает журнал, чтобы проверить историю выписки, поэтому, если вы хотите реализовать что-то подобное по своему усмотрению, вы должны проанализировать вывод git reflog для поиска строк checkout:. Вы можете проверить реализацию в источнике git sha1_name.c, в частности, функции interpret_nth_prior_checkout.

Ответ 5

Я приземлился на этот вопрос с той же мыслью, чтобы проверить мою предыдущую ветку. Я использую ohmyz в Mac. Ниже команда помогла мне.

$ gco -
$ git checkout -

Ответ 6

Наиболее популярным решением является:

git checkout @{-N}

Где N-ступенчатое число ветвей, чтобы вернуться к истории касп.

Ответ 7

Вот ссылки на части документации Gits, которые описывают решения git checkout - и git checkout @{-1} заданные другими ответами:

  • При указании ревизии Git для любой команды @{-<n>}, например, @{-1} означает "n-й ветвь/коммит извлечен перед текущей". Документация для git checkout <branch> повторяет: "Вы можете использовать синтаксис @{-N} для ссылки на N-ую последнюю ветвь/фиксацию, извлеченную с помощью операции git checkout ".

  • Для <branch> аргумент git checkout, "вы можете также указать„ - который является синонимом“ @{-1}."

Ответ 8

Git-версия 2.23 представила команду git switch, которую вы можете использовать для этого (и не только). Цитирование официальной документации:

Переключиться на указанную ветку. Рабочее дерево и индекс обновляются в соответствии с веткой. Все новые коммиты будут добавлены в кончик этой ветки.

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

Постскриптум Это не значит, что вы еще не знаете, как это сделать (я имею в виду, что прошло 7 лет с тех пор, как вы задали этот вопрос), но эта команда менее запутанна и дружелюбна для начинающих, поскольку она решает общую путаницу, которая возникает при использовании git checkout.