コミット履歴の確認
git logで過去のコミットの情報を詳細にリスト表示できる。
git log
出力には以下が含まれる。
- コミットID:各コミットを一意に識別するためのハッシュ値
- Author(作者):コミットを作成した人の名前とメールアドレス
- Date(日付):コミットが作成された日時
- コミットメッセージ:変更内容の説明文
オプション
-
--oneline:各コミットを1行で表示する(簡潔にできる) -
--graph:グラフでブランチやマージの履歴を視覚化できる -
-p ファイル名:特定ファイルを指定 -
-n コミット数:直近のコミットの履歴を確認
ブランチ
ブランチの一覧表示
git branchで全てのブランチを一覧表示させ、現在いるブランチを確認できる。
-aオプションでリモートリポジトリを含めたブランチ一覧を確認できる。
git branch
ブランチの削除
現在いるブランチは削除できないため、先に別のブランチに切り替える必要がある
マージ済みのブランチの削除
git branch -d ブランチ名
マージされていないブランチの削除
git branch -D ブランチ名
-Dオプションを使用すると強制削除となるので間違えないように注意する
ブランチの切り替え
git switchとgit checkoutのどちらでも可能。
git checkoutコマンドが多機能で複雑なため、よりシンプルなブランチの切り替えに特化したgit switchコマンドが新しく導入された。
切り替えのみ
// 新しいコマンド
git switch ブランチ名
// 元々のコマンド
git branch ブランチ名
新しいブランチを作成し、そのブランチに切り替える
git switch -c ブランチ名のように-cオプションをつけることで、切り替える前にブランチを作成できる。
-cは--createの省略形。
// 新しいコマンド
git switch -c ブランチ名
// 元々のコマンド
git checkout -b ブランチ名
ファイルの削除を記録
git rmでコミットされたファイルの削除を記録できる。
ワークツリーからも削除する場合
ファイルが削除された記録がステージングエリアに残る(次回のコミットに含まれる)。
git rm ファイル名
ワークツリーからは削除しない場合
このコマンドを実行すると、ファイルはローカルに残るが、次回以降のコミットには含まれなくなる。
git rm --cashed ファイル名
ファイルの移動を記録
git mvを使用する。
ファイル名の変更の記録もできる。
ステージングエリアに残る。
git mv 旧ファイル名 新ファイル名
# 以下と同じ
mv 旧ファイル名 新ファイル名
git rm 旧ファイル名
git add 新ファイル名
基本のワークフロー
git statusで現在のファイル状態を確認できる。
変更をステージする
git add ファイル名で作業しているディレクトリの変更内容をステージングエリアに追加できる。
git add ファイル名
差分の確認
git diffコマンドを使用する。
ワークツリーとステージングエリアの差分の確認
git diff
ステージングエリアとローカルリポジトリの差分の確認
git diff --staged
ファイル単位での変更の取り消し
git restoreとgit checkoutのどちらでも可能。
git restoreはgit switchのように新しく追加された。
一度git restoreやgit checkoutで変更を破棄すると、変更内容を復元できなくなるので注意する。
addされる前での取り消し
git restore ファイル名でまだgit addされていないファイルを最後にコミットされた状態へ戻すことができる。
// 新しいコマンド
git restore ファイル名
// 元々のコマンド(--はファイル名とブランチ名を区別するための区切り文字)
git checkout -- ファイル名
addされた後に、commitされる前(ステージングエリア)での取り消し
まずステージングエリアから取り下げる。
これでgit addされる前に戻る。
git restore --staged ファイル名
そして作業ディレクトリの変更を破棄する。
git restore ファイル名
変更のコミットを追加
git commitでステージングエリアにあるファイルの変更をローカルリポジトリに記録できる。
git commit -m "コミットメッセージ"
コミットの修正
git commmit --amendで前回のコミットを修正できる。
コミットメッセージの修正も可能。
まだpushしていないコミットにのみ使用する。
直前のコミットメッセージの修正
git commit --amend -m "修正後コミットメッセージ"
コミット後に一部ファイルをaddし忘れていたことに気づいた際の修正
まず忘れていたものをgit addする。
その後にgit commit --amendで修正する。
git commit --amend -m "元々のコミットメッセージ"
変更をプッシュする
準備
以下のgit remote addコマンドにより、今後originという名前でリモートリポジトリにプッシュできる。
git remote add origin リモートリポジトリのURL
pushする
git pushで今いるブランチのローカルリポジトリの変更をリモートリポジトリに反映できる。
一度-uオプションをつけてpushしておけば、次回からはgit pushだけでOK。
// 最初だけ
git push -u origin ブランチ名
// 2回目以降のpush
git push
// ブランチ名はHEADでもOK
git push -u origin HEAD
-uは--set-upstreamの省略形。
変更内容を確認する
git diffで変更内容を確認できる。
ファイル状態でオプションが異なる。
// いつでもできるファイル比較
git diff ファイル名1 ファイル名2
// add前
git diff
// add後のcommit前(以下はどちらも同じ)
git diff --staged
git diff --cached
// commit後
git diff HEAD^
ブランチのマージ(の流れ)
git mergeで指定したブランチの変更内容を現在のブランチにマージできる。
ブランチの切り替え
必要であれば先にマージ先のブランチに切り替えておく。
// ブランチの切り替え
git switch マージ先ブランチ名
// 例
git switch main
リモートリポジトリの最新情報を取得
これでマージコンフリクトを最小限に抑える。
git pull origin マージ先ブランチ名
// 例
git pull origin main
マージの実行
// 指定したブランチをマージ
git merge マージ元ブランチ名
// 例
git merge feature/new-feature
不要になったブランチの削除
git branch -d ブランチ名
// 例
git branch -d feature/new-feature
コミット履歴の取り消し
git resetやgit revertで取り消す。
現在のブランチの最新のコミットを示すHEAD、もしくはgit logで確認できるコミットログを指定する。
git reset
git resetはコミット履歴を書き換える。
そのため、共有されている履歴に対して行うと問題を引き起こす可能性がある。
まだリモートリポジトリにプッシュしていないローカルの変更を取り消す際に使用する。
オプション
-
--soft:作業ディレクトリやステージングエリアは変更されない -
--mixed(デフォルト):作業ディレクトリは変更されないが、ステージングエリアはリセットされgit add前に戻る -
--hard:作業ディレクトリのほかステージングエリアもリセットする
特に--hardは危険なコマンドなので注意して使う
// HEADを指定
git reset HEAD
// コミットIDを指定
git reset コミットID
git revert
git revertは特定のコミットで行われた変更を打ち消す新しいコミットを作成する。
安全に変更を取り消す。
主に既にプッシュして共有されているコミットに対して使用する。
// HEADを指定
git revert HEAD
// コミットIDを指定
git revert コミットID