Git pushd & popd? I.e., проверка последнего состояния
Я пишу Bash script, и я хочу проверить тег, а затем проверить, где я начал.
Я пробовал git co [email protected]{1}
, но при запуске на главном, это возвращает меня к фиксации SHA мастера, но с отключенной головкой.
Есть ли что-то вроде pushd
и popd
для Git?
Ответы
Ответ 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
Что это.