1. ホーム
  2. git

[解決済み] gitでコミット間を前進・後退させる方法は?

2022-07-18 13:37:07

質問

私は git bisect を実行していて、問題のあるコミットに到着した後、私は今、正しいものにいることを確認するために一歩前進/後退をしようとしています。

私が知っているのは HEAD^ を使って履歴をさかのぼることはできますが、このように(将来の特定のコミットに向かって)前進させる別の近道はないでしょうか。

A - B - C(HEAD) - D - E - F

私は、ターゲットが F から移動したい。 C から D .


注意: これは Git コミット間の行き来をする方法 私の質問は少し異なっており、そこでは回答されていません。

どのように解決するのですか?

私は少し実験して、これは前方にナビゲートするためのトリックを行うように思われる( 編集 : マージコミットなしの線形履歴があるときのみうまく機能します)。

git checkout $(git rev-list --topo-order HEAD..towards | tail -1)

ここで towards はコミットまたはタグのSHA1です。

説明します。

  • の中のコマンド $() の間のすべてのコミットを取得します。 HEADtowards コミット(ただし HEAD のように)、優先順位をつけてソートします。 git log のデフォルトである時系列順ではなく、(デフォルトでは rev-list のデフォルトである時系列順ではありません)、そして最後の一つを取り出します ( tail ) を、つまり行きたい方を選びます。
  • はサブシェルで評価されて git checkout に渡され、チェックアウトを実行します。

パラメータを期待するエイリアスとしてアクセス可能な関数を .profile ファイルの中で、パラメータを期待するエイリアスとしてアクセス可能な関数を定義して、特定のコミットに向けてナビゲートすることができます。

# Go forward in Git commit hierarchy, towards particular commit 
# Usage:
#  gofwd v1.2.7
# Does nothing when the parameter is not specified.
gofwd() {
  git checkout $(git rev-list --topo-order HEAD.."$*" | tail -1)
}

# Go back in Git commit hierarchy
# Usage: 
#  goback
alias goback='git checkout HEAD~'