前半では、リポジトリの作成から、変更の記録、状態の確認までを学びました。この後半では、過去の記録の確認、変更の取り消し、ブランチの活用、不要ファイルの除外など、より実践的な操作をマスターしていきましょう!
過去の記録を見てみよう(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 revert
と git 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 add
と git commit
でリポジトリに追加しましょう。
bash
git add .gitignore
git commit -m "Add .gitignore"