Skip to content

Gitの基本操作をマスターしよう(後編)

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

前半では、リポジトリの作成から、変更の記録、状態の確認までを学びました。この後半では、過去の記録の確認、変更の取り消し、ブランチの活用、不要ファイルの除外など、より実践的な操作をマスターしていきましょう!

過去の記録を見てみよう(git log

git commit で記録した変更履歴は、git log コマンドで確認できます。

ターミナルで以下のコマンドを実行してみましょう。

bash
git log

これまでのコミット履歴が、新しい順に表示されます。

commit 395571b21cf36d893d7b85af59ee9f796f092604 (HEAD -> main)
Author: Your Name <[email protected]>
Date:   Tue Nov 28 15:26:43 2023 +0900

    Update index.html

    index.htmlを修正し、h1タグの内容を変更した。

commit f4649e4d1d79182b959f2719409779796f092604
Author: Your Name <[email protected]>
Date:   Tue Nov 28 15:13:30 2023 +0900

    Create index.html

    index.html を新規作成し、Hello, Git! と表示するようにした。

それぞれのコミットには、以下の情報が含まれています。

  • コミットハッシュ: コミットを識別するための固有の文字列(例:395571b21cf36d893d7b85af59ee9f796f092604
  • 作成者: コミットを行った人の名前とメールアドレス(git config で設定した情報)
  • 日時: コミットが行われた日時
  • コミットメッセージ: コミット時に記述したメッセージ

もっと見やすく表示するには?

git log には、表示をカスタマイズするための様々なオプションがあります。

例えば、--oneline オプションをつけると、各コミットを1行で簡潔に表示できます。

bash
git log --oneline
395571b (HEAD -> main) Update index.html
f4649e4 Create index.html

--graph オプションをつけると、ブランチの分岐やマージを視覚的に表示できます。

bash
git log --oneline --graph
* 395571b (HEAD -> main) Update index.html
* f4649e4 Create index.html

これらのオプションを組み合わせて、自分が見やすい表示にカスタマイズしてみましょう。

間違えた!変更を元に戻したい!

Git を使っていると、「間違えて変更してしまった!」「やっぱり前の状態に戻したい!」という場面がよくあります。そんなときに役立つ、変更を取り消す方法を紹介します。

まだコミットしていない変更を取り消す

まだ git commit していない変更を取り消すには、git restore コマンドを使います。 ※それ以前のバージョンでは、git checkoutコマンドが使われていました。

例えば、index.html を変更した後に、その変更を取り消したい場合は、以下のコマンドを実行します。

bash
git restore index.html

これで、index.html は最後のコミットの状態に戻ります。

コミットした変更を取り消す (git revert, git reset) - 注意点も解説!

すでにコミットした変更を取り消すには、git revert または git reset コマンドを使います。

git revert: 指定したコミットの変更を打ち消す、新しいコミットを作成します。

例えば、最新のコミットを取り消したい場合は、以下のコマンドを実行します。

bash
git revert HEAD

HEAD は最新のコミットを指します。このコマンドを実行すると、最新のコミットで行われた変更を打ち消す、新しいコミットが作成されます。コミットメッセージを編集するエディタが開くので、必要に応じてメッセージを修正し、保存してエディタを終了すると、新しいコミットが作成されます。

git revert は、過去のコミットを変更せず、新しいコミットを追加することで変更を取り消すため、安全な方法 と言えます。

git reset: 指定したコミットまで、コミット履歴を巻き戻します。

例えば、2つ前のコミットまで戻したい場合は、以下のコマンドを実行します。

bash
git reset HEAD~2

HEAD~2 は、最新のコミットから2つ前のコミットを指します。このコマンドを実行すると、コミット履歴が HEAD~2 の状態まで巻き戻されます。

git reset は、コミット履歴を改変する ため、注意して使う必要があります。特に、他の人と共有しているリポジトリで使う場合は、混乱を招く可能性があるため、十分に注意してください。

git revertgit reset の使い分け

  • git revert: 過去のコミットはそのまま残し、変更を取り消す新しいコミットを追加する。安全
  • git reset: 指定したコミットまで、コミット履歴を巻き戻す。強力だが注意が必要

基本的には、git revert を使うことをお勧めします。git reset は、ローカルでの作業で、かつコミット履歴を整理したい場合に使うと良いでしょう。

ブランチで実験しよう (git branch, git checkout, git merge)

Git の強力な機能の一つに、「ブランチ」があります。ブランチを使うと、現在の作業内容に影響を与えずに、新しい機能の追加やバグ修正などを並行して行うことができます。

ブランチって何?

ブランチとは、メインの開発ライン(通常は main ブランチ)から分岐した、作業用のコピーのようなものです。

例えば、新しい機能を追加したい場合、main ブランチから新しいブランチを作成し、そのブランチ上で作業を行います。そうすることで、main ブランチの安定した状態を保ちながら、新しい機能の開発を進めることができます。

新しいブランチを作る

新しいブランチを作成するには、git branch コマンドを使います。

例えば、new-feature という名前の新しいブランチを作成する場合は、以下のコマンドを実行します。

bash
git branch new-feature

この時点では、まだブランチを切り替えたわけではなく、mainブランチにいることに注意してください。

ブランチを切り替える

作成したブランチに切り替えるには、git checkout コマンドを使います。 ※それ以前のバージョンでは、git switchコマンドが使われていました。

bash
git checkout new-feature

これで、new-feature ブランチに切り替わりました。以降の作業は、new-feature ブランチ上で行われます。

また、ブランチの作成と切り替えを同時に行う git checkout -b コマンドもよく使われます。

bash
git checkout -b new-feature

ブランチを統合する

new-feature ブランチでの作業が完了したら、その変更を main ブランチに統合(マージ)しましょう。

まずは、main ブランチに切り替えます。

bash
git checkout main

次に、git merge コマンドで new-feature ブランチを main ブランチにマージします。

bash
git merge new-feature

これで、new-feature ブランチで行った変更が main ブランチに統合されました。

コンフリクトって何?解決方法は?

複数のブランチで同じファイルの同じ部分を変更した場合、マージ時に「コンフリクト(競合)」が発生することがあります。

コンフリクトが発生すると、Git はどちらの変更を採用すればよいか判断できないため、手動で修正する必要があります。

例えば、index.html の同じ行を、main ブランチと new-feature ブランチで別々に変更した場合、マージ時に以下のようなコンフリクトメッセージが表示されます。

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

コンフリクトが発生したファイル(ここでは index.html)を開くと、以下のように、競合している部分が Git によってマークアップされています。

html
<<<<<<< HEAD
<h1>Hello, Git!</h1>
=======
<h1>Hello, Git! from new-feature</h1>
>>>>>>> new-feature
  • <<<<<<< HEAD から ======= までが、現在のブランチ(main)の変更内容です。
  • ======= から >>>>>>> new-feature までが、マージしようとしているブランチ(new-feature)の変更内容です。

どちらの変更を採用するか、または両方の変更を組み合わせて修正するかを決め、手動でファイルを編集します。

html
<h1>Hello, Git! from new-feature</h1>

ファイルを修正したら、git add でステージし、git commit でコミットします。

bash
git add index.html
git commit -m "Merge new-feature branch, resolving conflicts"

これでコンフリクトが解消され、マージが完了しました。

不要なファイルを管理から外す .gitignore

Git で管理する必要のないファイル(例えば、一時ファイルやログファイルなど)は、.gitignore ファイルを使って、管理対象から除外することができます。

.gitignore ファイルは、リポジトリのルートディレクトリに作成します。

例えば、my-project ディレクトリ内に .gitignore ファイルを作成し、以下のように記述します。

# コメント:# で始まる行は無視されます

# 一時ファイルを無視
*.tmp

# ログファイルを無視
logs/

# node_modules ディレクトリを無視
node_modules/

このように、.gitignore ファイルには、無視したいファイルやディレクトリのパターンを記述します。

.gitignore ファイルを作成したら、git addgit commit でリポジトリに追加しましょう。

bash
git add .gitignore
git commit -m "Add .gitignore"