Skip to content

もっとGitを使いこなすための応用編(前編)

公開日:December 12, 2024更新日:December 12, 2024
Git📄

この章では、Git の基本操作をマスターした皆さんに、さらに一歩進んだ応用的な使い方を紹介します。これらの機能を使いこなせば、Git での作業がより効率的になり、開発の幅も広がるでしょう。

特定のコミットだけを適用する(git cherry-pick

git cherry-pick は、他のブランチにある特定のコミットだけを、現在のブランチに適用したいときに使うコマンドです。

どんなときに使うの?

例えば、以下のような場合に git cherry-pick が役立ちます。

  • new-feature ブランチで追加した新機能の一部だけを、先に main ブランチに適用したい。
  • fix-bug ブランチで行ったバグ修正を、main ブランチにも適用したい。
  • 間違って別のブランチにコミットしてしまった変更を、正しいブランチに適用し直したい。

具体的な使用例と手順

ここでは、fix-bug ブランチで行ったバグ修正のコミットを、main ブランチに適用する例を見てみましょう。

  1. コミットハッシュの確認: まずは、fix-bug ブランチで修正したいコミットのコミットハッシュを確認します。git log コマンドで確認できます。

    bash
    git checkout fix-bug
    git log --oneline

    コミットハッシュはgit logで表示される英数字の羅列です。以下のような表示から、適用したいコミットのコミットハッシュをコピーしておきます。

    bash
    e5f7a3b (HEAD -> fix-bug) Fix the bug
    d4c8b2a Add new feature
    ...

    ここでは、e5f7a3b のコミットを適用したいとします。

  2. ブランチを切り替え: 次に、コミットを適用したいブランチ(ここでは main)に切り替えます。

    bash
    git checkout main
  3. cherry-pick の実行:git cherry-pick コマンドに続けて、適用したいコミットのコミットハッシュを指定して実行します。

    bash
    git cherry-pick e5f7a3b

    これで、fix-bug ブランチの e5f7a3b のコミットが、main ブランチに適用されました。

間違ったコミットを直前のコミットとまとめたい!(git commit --amend

「コミットメッセージを間違えてしまった!」「コミットに含めるべきファイルを忘れてしまった!」そんなときは、git commit --amend の出番です。

どんなときに使うの?

git commit --amend は、主に以下のような場合に使います。

  • 直前のコミットメッセージを修正したい。
  • 直前のコミットに、ファイルの変更を追加したい。
  • 間違ってコミットした内容を、直前のコミットに含めてしまいたい。

具体的な使用例と手順

ここでは、直前のコミットメッセージを修正する例を見てみましょう。

  1. commit --amend の実行: ターミナルで以下のコマンドを実行します。

    bash
    git commit --amend

    このコマンドを実行すると、コミットメッセージを編集するエディタが開きます。

  2. コミットメッセージの修正: エディタでコミットメッセージを修正し、保存してエディタを終了します。

    これで、直前のコミットメッセージが修正されました。

ファイルの変更を直前のコミットに追加したい場合は、まず git add で変更をステージしてから、git commit --amend を実行します。

bash
git add index.html
git commit --amend

git commit --amend は、直前のコミットを書き換える コマンドです。そのため、すでにリモートリポジトリにプッシュしたコミットに対しては、使用しないように注意してください。

一時的に変更を退避させる(git stash

「作業中のファイルをコミットせずに、一時的に別のブランチに切り替えたい」「今の変更を一旦脇に置いておきたい」そんなときに便利なのが git stash です。

どんなときに使うの?

git stash は、主に以下のような場合に使います。

  • 現在のブランチでの変更を一時的に保存して、別のブランチに切り替えたい。
  • 作業中の変更が中途半端な状態だけど、他の緊急のタスクに対応する必要がある。
  • 現在の変更をコミットする前に、git pull で最新の状態を取得したい。

具体的な使用例と手順

ここでは、作業中の変更を一時的に保存して、別のブランチに切り替える例を見てみましょう。

  1. 変更の保存:index.html を変更した状態で、以下のコマンドを実行します。

    bash
    git stash

    これで、index.html の変更が一時的に保存され、作業ディレクトリは最後のコミットの状態に戻ります。

  2. ブランチの切り替え: 別のブランチ(例えば main)に切り替えます。

    bash
    git checkout main
  3. 変更の復元:main ブランチでの作業が完了したら、new-feature ブランチに戻って、先ほど保存した変更を復元しましょう。

    bash
    git checkout new-feature
    git stash pop

    git stash pop コマンドで、最後に保存した変更が復元されます。

git stash には、他にも便利なオプションがあります。詳しくは、git stash --help で確認してみてください。

タグでリリースを管理しよう(git tag

git tag コマンドを使うと、特定のコミットに「タグ」を付けることができます。タグは、主にソフトウェアのリリースバージョンを管理するために使われます。

例えば、バージョン 1.0.0 をリリースする際に、その時点のコミットに v1.0.0 というタグを付けることで、後からそのバージョンのコードを簡単に参照できるようになります。

タグの作成:

bash
git tag v1.0.0

タグの一覧表示:

bash
git tag

タグ付きでコミットをチェックアウト:

bash
git checkout v1.0.0

git reflog で救出!

「間違って git reset してしまった!」「消してしまったブランチを復活させたい!」そんな絶望的な状況でも、諦めるのはまだ早いです。git reflog が救世主になるかもしれません。

git reflog は、Git の操作履歴を記録した「参照ログ」を表示するコマンドです。git reflog を使えば、コミット履歴から消えてしまったコミットでも、参照ログに残っていれば復元できる可能性があります。

参照ログの表示:

bash
git reflog

このコマンドを実行すると、以下のように操作履歴が表示されます。

e5f7a3b (HEAD -> main, tag: v1.0.0) HEAD@{0}: commit: Fix the bug
d4c8b2a HEAD@{1}: checkout: moving from main to new-feature
c7b4e5f HEAD@{2}: commit: Add new feature
...

HEAD@{数字} は、特定の時点の HEAD の位置を表しています。例えば、HEAD@{1} は、1つ前の HEAD の位置です。

コミットの復元:

例えば、e5f7a3b のコミットを復元したい場合は、以下のコマンドを実行します。

bash
git checkout e5f7a3b

これで、e5f7a3b のコミットの状態を復元できました。この状態を新しいブランチとして保存しておくとよいでしょう。

bash
git switch -c restore-e5f7a3b

git reflog は、Git の最後の砦です。いざというときのために、覚えておくと安心です。

便利なエイリアス設定

よく使う Git コマンドを、短いエイリアス(別名)で実行できるように設定しておくと、日々の作業が効率化されます。

例えば、git statusgit st で実行できるようにするには、以下のコマンドを実行します。

bash
git config --global alias.st status

他にも、以下のようなエイリアスを設定しておくと便利です。

bash
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.l "log --oneline --graph --decorate"

これらのエイリアスは一例です。自分好みにカスタマイズして、Git をより快適に使いこなしましょう!