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

Git pushd & popd? I.e., проверка последнего состояния

Я пишу Bash script, и я хочу проверить тег, а затем проверить, где я начал.

Я пробовал git co [email protected]{1}, но при запуске на главном, это возвращает меня к фиксации SHA мастера, но с отключенной головкой.

Есть ли что-то вроде pushd и popd для Git?

4b9b3361

Ответ 1

git checkout @{-1}, который может быть сокращен до git checkout -.

Из справочной страницы:

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

Ответ 2

EDIT: wnoise suggestion будет работать, если вы не хотите сохранять явную историю способом pushd/popd. Если вы это сделаете (и не хотите, чтобы обычный checkout повлиял на ваш LRU):

Я ничего не знаю о том, что будет делать то, что вы хотите из коробки, но это не сложно взломать что-то в этом направлении. Если вы добавите файл с именем git-foo в свой PATH, вы получите новую команду git foo. Итак, git-pushd может выглядеть так:

#!/bin/bash

SUBDIRECTORY_OK=1
. $(git --exec-path)/git-sh-setup

git symbolic-ref HEAD | sed s_refs/heads/__ >> $GIT_DIR/.pushd
git checkout "[email protected]"

И git-popd:

#!/bin/bash

SUBDIRECTORY_OK=1
. $(git --exec-path)/git-sh-setup

REF=$(head -n1 $GIT_DIR/.pushd)

[ -n "$REF" ] || die "No refs to pop"
git checkout "$REF" && sed -i -e '1d' $GIT_DIR/.pushd

Ответ 3

В script сначала сохраните текущую ветку (как написано в этом ответе):

branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
branch_name="(unnamed branch)"     # detached HEAD
branch_name=${branch_name##refs/heads/}

затем перейдите и проверьте тег, который вы хотите

git checkout -b tag_branch tag_name

Сделайте то, что вы хотите сделать на этой ветке, затем снова проверьте старую ветку:

git checkout $branch_name

Что это.