Git ブランチ ポインターを別のコミットに移動する

John Wachira 2023年6月20日
  1. 宛先ブランチでチェックアウト中に Git ブランチ ポインタを別のコミットに移動する
  2. 宛先ブランチでチェックアウトされていない間に Git ブランチ ポインタを別のコミットに移動する
Git ブランチ ポインターを別のコミットに移動する

この記事では、Git ブランチ ポインターを別のコミットに移動する方法について説明します。 宛先ブランチでチェックアウトされている場合とチェックアウトされていない場合にポインターを移動する方法を確認します。

より単純なものから始めましょう。

宛先ブランチでチェックアウト中に Git ブランチ ポインタを別のコミットに移動する

以下の例は、リポジトリ内の feature ブランチを示しています。 コミット履歴はこちら。

コミット履歴

4ee91ac コミットから e65841a コミット (つまり、HEAD@ {2}) にブランチ ポインターを移動します。 これについてどうすればよいでしょうか?

宛先である feature ブランチにチェックアウトされているため、以下に示すように git reset コマンドを実行できます。

$ git reset --hard e65841a

出力:

HEAD is now at e65841a Update README.md

これにより、参照が指定されたコミットに移動します。 かなり簡単ですよね?

次のシナリオに移りましょう。

宛先ブランチでチェックアウトされていない間に Git ブランチ ポインタを別のコミットに移動する

master ブランチに切り替えましょう。 master ブランチでチェックアウトしているときに、feature ブランチのブランチ ポインタを移動するにはどうすればよいでしょうか?

2つの方法があります。 最も簡単なものから始めます。

git branch コマンド

このシナリオのコマンドの基本的な構文は次のとおりです。

$ git branch -f <branch-name> <commit-hash>

このシナリオでは、ポインターを afcc8bb コミットに移動します。 どうすればいいですか?

以下に示すように、feature ブランチのポインタを git branch コマンドで移動できます。

$ git branch -f feature afcc8bb

これにより、ポインターが指定されたコミットに移動するはずです。 私たちのケースを確認しましょう。

git branch -f feature

それはそれと同じくらい簡単です。 他の方法を見てみましょう。

git update-ref コマンド

以下に示すように、git update-ref コマンドを使用してブランチ ポインターを移動できます。

$ git update-ref -m "reset: Reset <branch-name> to <sha1-commit-hash>" refs/heads/<branch-name> <sha1-commit-hash>

ポインターをさらに 124bfa9 コミットに移動します。 これが私たちがそれを行う方法です。

まず、master ブランチに戻りましょう。 次に、以下に示すようにコマンドを実行します。

$ git update-ref -m "reset: Reset feature to 124bfa9" refs/heads/feature 124bfa9

上記のコマンドはポインターを移動し、feature ブランチの reflog にメッセージを追加します。 私たちのケースを確認しましょう。

git update-ref

そこにあります。

簡単に言えば、Git では、目的のブランチでチェックアウトされている場合とチェックアウトされていない場合の両方で、ブランチ ポインターを移動できます。 両方のシナリオで異なるコマンドについて説明しました。

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

関連記事 - Git Branch