この章では、Git の基本操作をマスターした皆さんに、さらに一歩進んだ応用的な使い方を紹介します。これらの機能を使いこなせば、Git での作業がより効率的になり、開発の幅も広がるでしょう。
特定のコミットだけを適用する(git cherry-pick
)
git cherry-pick
は、他のブランチにある特定のコミットだけを、現在のブランチに適用したいときに使うコマンドです。
どんなときに使うの?
例えば、以下のような場合に git cherry-pick
が役立ちます。
new-feature
ブランチで追加した新機能の一部だけを、先にmain
ブランチに適用したい。fix-bug
ブランチで行ったバグ修正を、main
ブランチにも適用したい。- 間違って別のブランチにコミットしてしまった変更を、正しいブランチに適用し直したい。
具体的な使用例と手順
ここでは、fix-bug
ブランチで行ったバグ修正のコミットを、main
ブランチに適用する例を見てみましょう。
コミットハッシュの確認: まずは、
fix-bug
ブランチで修正したいコミットのコミットハッシュを確認します。git log
コマンドで確認できます。bashgit checkout fix-bug git log --oneline
コミットハッシュは
git log
で表示される英数字の羅列です。以下のような表示から、適用したいコミットのコミットハッシュをコピーしておきます。bashe5f7a3b (HEAD -> fix-bug) Fix the bug d4c8b2a Add new feature ...
ここでは、
e5f7a3b
のコミットを適用したいとします。ブランチを切り替え: 次に、コミットを適用したいブランチ(ここでは
main
)に切り替えます。bashgit checkout main
cherry-pick
の実行:git cherry-pick
コマンドに続けて、適用したいコミットのコミットハッシュを指定して実行します。bashgit cherry-pick e5f7a3b
これで、
fix-bug
ブランチのe5f7a3b
のコミットが、main
ブランチに適用されました。
間違ったコミットを直前のコミットとまとめたい!(git commit --amend
)
「コミットメッセージを間違えてしまった!」「コミットに含めるべきファイルを忘れてしまった!」そんなときは、git commit --amend
の出番です。
どんなときに使うの?
git commit --amend
は、主に以下のような場合に使います。
- 直前のコミットメッセージを修正したい。
- 直前のコミットに、ファイルの変更を追加したい。
- 間違ってコミットした内容を、直前のコミットに含めてしまいたい。
具体的な使用例と手順
ここでは、直前のコミットメッセージを修正する例を見てみましょう。
commit --amend
の実行: ターミナルで以下のコマンドを実行します。bashgit commit --amend
このコマンドを実行すると、コミットメッセージを編集するエディタが開きます。
コミットメッセージの修正: エディタでコミットメッセージを修正し、保存してエディタを終了します。
これで、直前のコミットメッセージが修正されました。
ファイルの変更を直前のコミットに追加したい場合は、まず git add
で変更をステージしてから、git commit --amend
を実行します。
bash
git add index.html
git commit --amend
git commit --amend
は、直前のコミットを書き換える コマンドです。そのため、すでにリモートリポジトリにプッシュしたコミットに対しては、使用しないように注意してください。
一時的に変更を退避させる(git stash
)
「作業中のファイルをコミットせずに、一時的に別のブランチに切り替えたい」「今の変更を一旦脇に置いておきたい」そんなときに便利なのが git stash
です。
どんなときに使うの?
git stash
は、主に以下のような場合に使います。
- 現在のブランチでの変更を一時的に保存して、別のブランチに切り替えたい。
- 作業中の変更が中途半端な状態だけど、他の緊急のタスクに対応する必要がある。
- 現在の変更をコミットする前に、
git pull
で最新の状態を取得したい。
具体的な使用例と手順
ここでは、作業中の変更を一時的に保存して、別のブランチに切り替える例を見てみましょう。
変更の保存:
index.html
を変更した状態で、以下のコマンドを実行します。bashgit stash
これで、
index.html
の変更が一時的に保存され、作業ディレクトリは最後のコミットの状態に戻ります。ブランチの切り替え: 別のブランチ(例えば
main
)に切り替えます。bashgit checkout main
変更の復元:
main
ブランチでの作業が完了したら、new-feature
ブランチに戻って、先ほど保存した変更を復元しましょう。bashgit 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 status
を git 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 をより快適に使いこなしましょう!