Bashスクリプトを書いていますが、タグをチェックアウトしてから、開始した場所にチェックアウトしたいと思います。
試しgit co HEAD@{1}
ましたが、マスターから始めると、マスターのコミットSHAに戻りますが、ヘッドが切り離されています。
pushd
&popd
for Gitのようなものはありますか?
Bashスクリプトを書いていますが、タグをチェックアウトしてから、開始した場所にチェックアウトしたいと思います。
試しgit co HEAD@{1}
ましたが、マスターから始めると、マスターのコミットSHAに戻りますが、ヘッドが切り離されています。
pushd
&popd
for Gitのようなものはありますか?
git checkout @{-1}
と省略できますgit checkout -
。
特殊なケースとして、最後の N 番目のブランチの "@{-N}" 構文は、(デタッチする代わりに) ブランチをチェックアウトします。「@{-1}」と同義の - を指定することもできます。
編集: 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
スクリプトで、最初に現在のブランチを保存します (この回答に書かれているように):
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
それでおしまい。