15

Bashスクリプトを書いていますが、タグをチェックアウトしてから、開始した場所にチェックアウトしたいと思います。

試しgit co HEAD@{1}ましたが、マスターから始めると、マスターのコミットSHAに戻りますが、ヘッドが切り離されています。

pushdpopdfor Gitのようなものはありますか?

4

3 に答える 3

27

git checkout @{-1}と省略できますgit checkout -

マンページから:

特殊なケースとして、最後の N 番目のブランチの "@{-N}" 構文は、(デタッチする代わりに) ブランチをチェックアウトします。「@{-1}」と同義の - を指定することもできます。

于 2011-03-01T05:53:40.553 に答える
4

編集: pushd/popd のように明示的な履歴を保持したくない場合は、wnoise の提案が機能します。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 "$@"

そして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
于 2011-03-01T05:56:05.550 に答える
0

スクリプトで、最初に現在のブランチを保存します (この回答に書かれているように):

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

それでおしまい。

于 2011-03-01T05:52:27.697 に答える