Git(version 2.50)コマンドメモ

Gitを使っていると「このコマンド何だっけ?」ってよくなるので、自分用にまとめておく。Git 2.50 を前提に、用途ごとに・何をやってるかが分かるように整理した。

Gitの基本的な仕組み

コマンドを覚える前に、Gitの3つのエリアを理解しておくと話が早い。

  1. 作業ツリー:今いじってるファイル
  2. ステージ(index):コミット予定として選んだ変更
  3. リポジトリ:コミットとして記録された履歴

ファイルを編集したら、add でステージに載せて、commit でリポジトリに記録する。この流れが全ての基本。

作業ツリー  ──add──▶  ステージ  ──commit──▶  リポジトリ

リポジトリを用意する

git init:新規にリポジトリを作る

今いるフォルダをGit管理下に置く。.git フォルダが作られる。

git init
git init -b main   # 初期ブランチ名をmainに指定

git clone:既存のリポジトリを手元に持ってくる

git clone https://github.com/user/repo.git
git clone URL フォルダ名   # フォルダ名を指定してクローン

初期設定(最初の1回)

コミットの作者情報を設定する。未設定だとコミットできない。

git config --global user.name "名前"
git config --global user.email "メール"
git config --list   # 確認

状態を確認する

git status:今どうなってる?

どのファイルが変更されたか、ステージに載っているか、コミット待ちか、を全部教えてくれる。迷ったら最初に叩くコマンド

git status
git status -s   # 短い表示(一覧が多いとき用)

git diff:具体的に何が変わった?

変更内容を行単位で見れる。

git diff                 # まだステージしてない変更
git diff --staged        # ステージ済みの変更
git diff main..feature   # ブランチ同士の差分

変更を記録する

git add:コミット対象を選ぶ

変更したファイルをステージに載せる。全部まとめて載せることも、ファイル単位や行単位で選ぶこともできる。

git add ファイル名     # 特定のファイルだけ
git add .             # 今いるフォルダ以下すべて
git add -p            # 変更の一部(hunk)だけ対話的に選ぶ

-p は「1ファイル内の一部の変更だけコミットしたい」ときに便利。

git commit:変更を確定する

git commit -m "メッセージ"
git commit -am "メッセージ"      # addとcommitを同時に(追跡済みファイルのみ)
git commit --amend -m "新しい"   # 直前のコミットを上書き

--amend は「さっきのコミットにファイル入れ忘れた」「メッセージtypoった」ときに使う。ただし push 済みのコミットに使うと履歴が書き換わるので注意。

git log:履歴を見る

git log                         # 詳細な履歴
git log --oneline               # 1行表示(見やすい)
git log --oneline --graph --all # 全ブランチを図で表示
git log -- ファイル名           # 特定ファイルの履歴

ブランチを切り替える

ブランチは「並行して作業できる別の履歴ライン」。本番用の main を触らずに、新機能用のブランチで作業して、完成したら統合する、という使い方が基本。

git branch:ブランチを一覧・作成・削除

git branch          # ローカルの一覧
git branch -a       # リモート含む一覧
git branch 名前     # 作成だけ(切り替わらない)
git branch -d 名前  # 削除(マージ済みのみ)
git branch -D 名前  # 強制削除

git switch:ブランチを切り替える

昔は git checkout だったけど、今は役割が分かりやすい switch が推奨。

git switch main         # mainに切り替え
git switch -c 新ブランチ # 作成して切り替え
git switch -            # 直前のブランチに戻る

git merge:ブランチを統合する

「取り込みたい側に移動してから、merge する」のが基本。

git switch main           # 取り込み先に移動
git merge feature/login   # feature/login の内容をmainに統合

git rebase:履歴をきれいに統合する

merge と似てるけど、履歴を一直線に整えるのが違い。チーム開発では好みが分かれる。

git switch feature
git rebase main          # mainの最新を土台に載せ替え
git rebase -i HEAD~3     # 対話的にコミットをまとめる・編集する

コンフリクトが起きた時

merge や rebase で衝突したら、該当ファイルを手で直してから続行する。

git status            # どのファイルが衝突してるか確認
# 該当ファイルを編集して修正
git add 修正したファイル

# mergeの場合
git merge --continue
git merge --abort     # やめる

# rebaseの場合
git rebase --continue
git rebase --abort    # やめる

リモートとのやり取り

GitHubなどと同期するコマンド。

git remote:リモート先の管理

git init で作った場合はリモート先を自分で登録する必要がある。

git remote -v                        # 登録済みのリモートを確認
git remote add origin URL            # リモートを追加
git remote set-url origin 新URL      # URLを変更

git pull:リモートの変更を取り込む

git pull              # 今のブランチに取り込む
git pull origin main  # 明示的に指定

中身は「fetch(取得)+ merge(統合)」を一気にやってるだけ。

git push:ローカルの変更を送る

git push
git push -u origin ブランチ名  # 初回は -u で追跡設定(以降は git push だけでOK)
git push --force-with-lease    # 安全めの強制push

--force は他人の変更を消す危険があるので、--force-with-lease の方が安全。

git fetch:取得だけする(マージしない)

リモートの変更を一旦確認してから取り込みたいとき用。

git fetch
git log origin/main..main  # まだpushしてないコミットを確認
git log main..origin/main  # まだ取り込んでないコミットを確認

やり直したい時

Gitで一番ググるのがこのへん。状況別に整理しておく。

ファイルの変更を捨てたい


git restore ファイル名  # 編集前に戻す
git restore .          # 全部戻す
git restore --source=HEAD~1 .          # 復元元を「1つ前のコミット」に指定

ステージから降ろしたい(addを取り消す)

git restore --staged ファイル名

直前のコミットを取り消したい

git reset --soft HEAD~1   # コミットだけ取り消し(ステージも作業ツリーもそのまま)
git reset --mixed HEAD~1  # コミットとステージを取り消し(変更は作業ツリーに残る)※デフォルト
git reset --hard HEAD~1   # 全部消す(変更も消える・危険)

--mixed が省略時のデフォルト(git reset HEAD~1 と同じ)。

pushしちゃったコミットを打ち消したい

共有ブランチでは reset じゃなく revert を使う。打ち消し用のコミットを新しく作るので、履歴は改変されない。

git revert コミットハッシュ

stash:作業を一時退避

「作業途中だけど急いで別ブランチに移りたい」ときに使う。コミットせずに変更を退避できる。

git stash          # 退避
git stash -u       # 未追跡ファイルも含めて退避
git stash list     # 一覧
git stash pop      # 戻す(退避リストから消す)
git stash apply    # 戻す(退避リストに残す)
git stash drop     # 捨てる

その他よく使うやつ

git cherry-pick:特定のコミットだけ取り込む

git cherry-pick コミットハッシュ

git tag:バージョンタグを打つ

git tag v1.0.0                  # 軽量タグ
git tag -a v1.0.0 -m "リリース"  # 注釈付きタグ
git push origin v1.0.0          # タグをリモートに送る
git push origin --tags          # 全タグをまとめて送る

git rm –cached:Gitの管理から外す

間違ってコミットしたファイルを管理対象から外したいとき(ローカルには残す)。

git rm --cached ファイル名

.gitignore を後から効かせる

gitignoreに追記したけど、既にコミット済みのファイルには効かない。その場合の対処。

git rm -r --cached .
git add .
git commit -m "apply gitignore"

状況別・コマンドの選び方

やりたいこと使うコマンド
リポジトリを作るgit init / git clone
今の状態を見たいgit status / git diff
変更を記録したいgit addgit commit
履歴を見たいgit log --oneline --graph
ブランチを切りたいgit switch -c
ブランチを統合したいgit merge / git rebase
コンフリクト解消修正 → git add--continue
リモートと同期git pull / git push
作業を捨てたいgit restore
コミットを取り消したい(未push)git reset
コミットを打ち消したい(push済み)git revert
一時退避したいgit stash

とりあえずこの表だけブックマークしておけば、大抵の場面で「あ、これ使えばいいのか」と思い出せるはず。

タイトルとURLをコピーしました