Gitの構造や予備知識、コマンドなどを備忘録としてまとめておく。
※ 挿絵は全てAI生成画像です。内容を確認の上掲載しています。
Gitの基本構造とデータの流れ
Gitファイルのステータスコード
ブランチ名の接頭辞
よく使われるものを示します。絶対のルールではありません。
| 接頭辞 | 意味 |
|---|---|
feature/ |
新しい機能の追加 |
fix/ |
バグ修正 |
hotfix/ |
緊急性の高いバグ修正 |
refactor/ |
動作を変えない内部コードの改善 |
docs/ |
ドキュメントの追加・修正 |
test/ |
テストコードの追加・修正 |
style/ |
CSSや見た目の修正 |
chore/ |
設定変更や依存パッケージ更新 |
perf/ |
パフォーマンス改善 |
release/ |
リリース準備 |
experiment/ |
検証や試作 |
ヘルプ
指定したコマンドのオプションに関するヘルプを表示する。
意外と重宝する。
git <コマンド> -h
クローン
リモートリポジトリをローカルにコピーする。
SSH形式:
git clone git@github.com:<ユーザー名>/<リポジトリ名>.git
HTTPS形式:
git clone https://github.com/<ユーザー名>/<リポジトリ名>.git
現在の状態を確認
git status
git status --short
変更内容を確認する
ステージングしていない変更
git diff
ステージング済みの変更
git diff --staged
※git diffでは、新規作成された未追跡のファイルは表示されないので注意。
ステージング
1ファイルのみステージング:
git add <ファイルパス>
現在のディレクトリ以下の変更をすべてステージング:
git add .
ステージングを取り消す
技術的には、HEADの内容をステージングエリアにコピーすることで、ステージングを取り消している。
A: HEAD
B: ステージングエリア
B: 作業ディレクトリ
⇩
A: HEAD
A: ステージングエリア
B: 作業ディレクトリ
git restore --staged <ファイルパス>
全てのファイルを対象にするには.を使用する。
git restore --staged .
作業内容を破棄する
技術的には、ステージングエリアの内容を作業ディレクトリにコピーすることで、作業内容を破棄している。
A: HEAD
B: ステージングエリア
C: 作業ディレクトリ
⇩
A: HEAD
B: ステージングエリア
B: 作業ディレクトリ
git restore <ファイルパス>
全てのファイルを対象にするには.を使用する。
git restore .
※未追跡のファイルはそのまま残るので注意。
コミット
git commit -m "<コミットメッセージ>"
直前のコミットを作り直す
ステージング済みの変更を含めて直前のコミットを作り直す。
git commit --amend
上記ではvimが開かれコミットメッセージを編集できるが、手っ取り早く下記でも可能。
git commit --amend -m "<コミットメッセージ>"
コミットメッセージを再利用する場合:
git commit --amend --no-edit
リモートから最新を取得
追跡先のブランチからプルする場合:
git pull
originのmainを現在のブランチに統合したい場合:
git pull origin main
※追跡先のブランチはgit branch -vvで確認可能。
※プル=フェッチ&マージ
リモートへ送信
git push
初回の場合:
「mainブランチをリモートのorigin/mainブランチに送信する。次回以降もローカルのmainはorigin/mainに送信するように紐付けを行う。」と言う意味になる。
git push -u origin main
または
git push --set-upstream origin main
ブランチ一覧
git branch
リモートも含める場合:
git branch -a
ブランチ作成
git branch <ブランチ名>
ブランチを切り替える
git switch <ブランチ名>
作成と同時に切り替える場合:
git switch -c <ブランチ名>
ブランチを削除
git branch -d <ブランチ名>
強制的に削除する場合:
git branch -D <ブランチ名>
リモートの最新情報を取得
リモート追跡ブランチを最新の状態にする。
git fetch
リモートを指定する場合:
git fetch <リモート名>
ブランチを指定する場合:
git fetch <リモート名> <ブランチ名>
コミット履歴を見る
git log
見やすく表示する場合:
git log --oneline --graph --decorate
リモート一覧
git remote -v
どのブランチを追跡しているか
git branch -vv
一時退避(stash)
ブランチを一時的に切り替える際に、今のブランチ状態をスタッシュエントリーとして保存することで、一時退避を実現する。
A: HEAD
B: ステージングエリア
C: 作業ディレクトリ
⇩ (スタッシュすると、ブランチの状態はHEADに戻る。)
A: HEAD
A: ステージングエリア
A: 作業ディレクトリ
git stash
git stash -u # 未追跡ファイルも含める場合
git stash push --include-untracked # 未追跡ファイルも含める場合
git stash push -m "<コミットメッセージ>" # スタッシュ内容にコミットメッセージをつける場合
スタッシュ一覧を表示する:
git stash list
復元する:
git stash pop # 復元に成功した場合、復元と同時にstashを削除
git stash apply # 復元してもstashはそのまま保持
stashを削除する:
git stash drop stash@{0} # 削除するstashは適宜指定
ファイル削除
ファイルを削除し、Git管理下からも削除する:
git rm <ファイルパス>
上記は下記と同等
rm <ファイルパス>
git add <ファイルパス>
ファイルは残しつつ、Git管理下から削除する場合:
git rm --cached <ファイルパス>
ファイル名変更
git mv old.txt new.txt
上記は下記と同等
mv old.txt new.txt
git add old.txt new.txt
コミットを取り消す
指定したコミットまで各状態を戻す。
ただし、未追跡ファイルは削除されない。
git reset --soft <コミット> # コミットのみ戻す。
git reset --mixed <コミット> # コミットとステージングを戻す。
git reset --hard <コミット> # コミットとステージング、作業ツリーを戻す。
git reset <コミット> # --mixedはデフォルトなので省略可能。
コミットの指定方法の例:
C ← HEAD (コミットID: aabxs)
|
B ← HEAD~1 (コミットID: hhsnk)
|
A ← HEAD~2 (コミットID: akkls)
git reset HEAD # Cの状態に戻す
git reset HEAD~1 # Bの状態に戻す
git reset <コミットID> # Bの状態に戻す
過去のコミットを打ち消す
過去のコミットが行った変更を打ち消す、新しいコミットを作成する。
git revert <コミットID> # コミットIDを指定して打ち消す
git revert HEAD # 最新のコミットを打ち消す
git revert HEAD~2 # HEAD~2のコミットを打ち消す※HEADとHEAD~1のコミットは打ち消さない。
注意として、HEAD~2と指定した場合、HEADとHEAD~1のコミットによって生じた変更は打ち消さないので、HEAD~3の状態に戻るわけではないことに留意してください。
未追跡ファイルを削除する
git clean -n # 未追跡ファイルを確認
git clean -f # 未追跡ファイルの削除を実行
ディレクトリも含める場合:
git clean -nd # 未追跡ファイル/ディレクトリを確認
git clean -fd # 未追跡ファイル/ディレクトリの削除を実行
マージ
別ブランチの変更履歴を現在いるブランチへ統合する。
git merge <取り込むブランチ>
スカッシュマージ:
git merge --squash <取り込むブランチ>
git commit -m "<コミットメッセージ>"
フェッチからのマージ:
git merge <取り込むブランチ>
リベース
ブランチの分岐元を、別のコミットへ付け替える操作。
git switch feature
git fetch origin
git rebase origin/main
リモートURL確認
git remote get-url origin
リモートURL変更
git remote set-url origin git@github.com:<ユーザー名>/<リポジトリ名>.git
SSH接続確認
ssh -T git@github.com





