0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gitコマンドまとめ(自分用)

0
Last updated at Posted at 2025-05-08

はじめに

git version

コマンド 説明
git version Gitのバージョンを出力する

git clone

コマンド 説明
git clone {リポジトリのURL} 対象リポジトリのデフォルトブランチをクローンする
git clone --depth {深さ} {リポジトリのURL} 対象リポジトリのデフォルトブランチを指定したコミット数で切り詰めてクローンする
git clone -b {ブランチ名} {リポジトリのURL} 対象リポジトリの対象ブランチをクローンする
git clone --recursive {リポジトリのURL} サブモジュールを含む対象リポジトリのデフォルトブランチをクローンする
git clone --depth 1 {リポジトリのURL} 履歴が多いリポジトリをクローンする時間を短縮できます

git remote

コマンド 説明
git remote リモートリポジトリの一覧を出力する
git remote add {リモートリポジトリ名} {リポジトリのURL} 対象リポジトリをローカルのリモートリポジトリに追加する
git remote rename {旧リモートリポジトリ名} {新リモートリポジトリ名} ローカルの対象リモートリポジトリをリネームする
git remote remove {リモートリポジトリ名} 対象リモートリポジトリをローカルから削除する

git branch

コマンド 説明
git branch ローカルブランチの一覧を出力する(チェックアウト中のブランチに * が付く)
git branch -r リモートブランチの一覧を出力する
git branch -a ローカルブランチとリモートブランチの一覧を出力する
git branch {ブランチ名} 対象ブランチを新規作成する(チェックアウトしない)
git branch -d {ブランチ名} 対象ブランチを削除する
git branch -f {ブランチ名} 対象ブランチを強制削除する
git branch -D {ブランチ名} 対象ブランチを強制削除する
git branch -m {旧ブランチ名} {新ブランチ名} 対象ブランチをリネームする
git branch --set-upstream-to=origin/リモートブランチ名 ローカルブランチ名 ローカルのYYYブランチの追跡するリモートブランチをXXXへ変更
git branch -VV ローカルブランチ名,状態,追跡するリモートブランチ名を表示

git checkout

コマンド 説明
git checkout {ブランチ名} 対象ブランチに切り替える
git checkout -b {ブランチ名} 対象ブランチを新規作成し、切り替える
git checkout {ファイルパス} ワーキングディレクトリにある対象ファイルの変更を取り消す
git checkout . ワーキングディレクトリにある全ファイルの変更を取り消す

2.23.0で git switchgit restore コマンドが追加され、git checkout コマンドを使わなくても済むようになりました。

git restore

基本的に指定したファイルの変更を取り消し,最後にコミットされた状態へ戻す.

コマンド 説明
git restore {ファイルパス} ワーキングディレクトリにある対象ファイルの変更を取り消す
git restore . ワーキングディレクトリにある全ファイルの変更を取り消す
git restore --source {コミットID} {ファイルパス} 対象ファイルの変更を対象コミットに戻す

単にステージ(git add)したワーキングディレクトリの変更を取り下げる場合は,オプションに--stagedを用いる.

コマンド 説明
git restore --staged {ファイルパス} 対象ファイルのステージングを取り消す
git restore --staged . 全てのステージングを取り下げる

git diff

コマンド 説明
git diff ワーキングディレクトリにあるファイルの差分
git diff --ignore-permissions ファイルのパーミッション(実行権限など)の変更を無視

ブランチ間

コマンド 説明
git diff [ブランチ名A] [ブランチ名B] ブランチA,Bの全てのファイルの差分を表示
git diff [ブランチ名A] [ブランチ名B] <filepath> filepath について、ブランチA,Bの差分を表示
git diff [ブランチ名A] [ブランチ名B] --stat ブランチA,Bの差分の行数表示

空白を除く

コマンド 説明
git diff -w 空白(スペース、タブ、改行など)の変更を無視
git diff -w --ignore-blank-lines --ignore-space-at-eol 空白,空行を全て無視 
git diff -w --ignore-blank-lines --ignore-space-chang
git diff --ignore-blank-lines 空行の追加や削除を無視
git diff --ignore-space-change 空白の量の変更を無視。インデントの変更(タブ→スペースの変換など)があっても、差分として表示しない

備考

  • git diff --cached: インデックスにあるファイルの差分、vscodeの gitビューで見れる

git status

コマンド 説明
git status 変更したファイルの一覧を出力する
git status -s git status を短い形式で出力する
git status -s -b 短い形式でもブランチとトラッキングを出力する

git add

コマンド 説明
git add {ファイルパス1} {ファイルパス2}... 対象ファイルをインデックス(コミット対象)に追加する
git add -A 変更した全ファイルをインデックスに追加する
git add -p {ファイルパス} 対象ファイルをハンク単位でインデックスに追加する

git reset

コミットを取り消す際に用いる.

git reset (option 1) (option 2)

  • option1:コミット取り消し後の状態の指定(デフォルトでは --mixed)
  • option2:戻る先のコミットの指定(デフォルトでは HEAD の1つ前のコミット)
コマンド 説明 備考
git reset --soft 最新のコミットを取り消し、その変更をステージングエリアに残す(git add状態は保持) git commitにより最新のコミットを(新たなコミットとして)復元可能
git reset --mixed(デフォルト) 最新のコミットを取り消し、その変更をワーキングディレクトリに残し、ステージングエリアから外す git addからのgit commitにより、最新のコミットを復元可能
git reset --hard 最新のコミットとすべての変更を取り消し、ワーキングディレクトリとステージングエリアを完全にリセットする(変更内容が失われる) ワーキングディレクトリの変更が取り消されているためgit addgit commitでは復元できない
git reset --hard ORIG_HEAD 直前の git reset 操作を元に戻す(通常、git reset --hard の取り消し)

最新のコミットを取り消すため,共通して最新のコミット以降の変更を間接的に取り消すことに注意.

コミットに作用せずに単にステージングを取り消す(ワーキングディレクトリの変更自体はそのまま)操作を行うにはHEADを付け加える(つまり,git reset --mixed HEAD).

コマンド 説明
git reset HEAD {ファイルパス} ステージングエリアにある対象ファイル(git add {ファイルパス} を取り消す
git reset HEAD ステージングエリアにある全ファイル(git add -A)を取り消す
`git reset HEAD` と `git restore --staged .` どちらも機能面では同じ.ただし,ニュアンスが少し異なる.
  • 共通点

    • ステージングエリアにある変更をワーキングディレクトリに戻す
    • コミット履歴には影響を与えない.ステージングされている変更を解除するだけで、ワーキングディレクトリにはその変更が残る

  • 微妙な違い

    • git reset HEAD
      古いGitのバージョンから存在しており,ステージングエリア全体や特定のファイルを扱う場合に使われる.HEADを基準として操作を行うため、直感的には「HEADに対してリセットを行う」という感じ.
    • git restore --staged
      Git 2.23以降で導入された新しいコマンドで,より明示的な操作を可能する.このコマンドは、ワーキングディレクトリとステージングエリアの変更を独立して操作するために設計されている.

git commit

コマンド 説明
git commit 指定したエディタ (.gitconfig の editor) でメッセージを書き、インデックスにある全ファイルをコミットする
git commit -m "{メッセージ}" メッセージを付け、インデックスにある全ファイルをコミットする
git commit --amend 直前のコミットを修正する(ファイル追加・メッセージ変更・タイポ修正など)
git commit --amend --no-edit 直前のコミットにファイルを追加する(メッセージは変更しない)
git commit --amend -m "{メッセージ}" 直前のコミットを修正し、メッセージを指定した内容に変更する

「指定したエディタ」とは、.gitconfigeditor で指定しているエディタのことです。

git revert

コマンド 説明
git revert HEAD 直前のコミットを元に戻すコミットを作成する
git revert {コミットID} 対象コミットを元に戻すコミットを作成する

git push

コマンド 説明
git push origin {ローカルブランチ名} 対象ローカルブランチを origin にプッシュする
git push -d origin {リモートブランチ名} 対象リモートブランチを origin から削除する
git push origin {タグ名} 対象タグを origin にプッシュする
git push -d origin {タグ名} 対象タグを origin から削除する
git push -f (--force) 強制プッシュする
git push --force-with-lease 強制プッシュする(ブランチのアップストリームが変更されている場合などは拒否する)

git fetch

コマンド 説明
git fetch origin origin から最新の履歴を取得する
git fetch --prune origin リモートリポジトリ上に存在しなくなったブランチなどの参照を削除し、origin から最新の履歴を取得する

git rebase

コマンド 説明
git rebase origin/{ブランチ名} origin にある対象ブランチを、チェックアウト中のブランチへリベースする
git rebase --continue リベースを続ける
git rebase --abort リベースを強制終了する
git rebase --quit リベースを中止する

git rebase自体
例えば,

git checkout main && git pull origin main

この時,目的のブランチ(rebased-branch)をmainのブランチから生やし直したいとき,

git checkout rebased-branch && git rebase main

onto

git rebase --onto どこへ どこから どのブランチを

あるブランチがどこから生えているかを変更することができる。

例: (まちがって master から切ってしまった feature_x ブランチを develop に移動する)

git rebase --onto develop main feature_x

git merge

コマンド 説明
git merge origin/{ブランチ名} origin にある対象ブランチを、チェックアウト中のブランチへマージする
git merge --squash origin/{ブランチ名} origin にある対象ブランチのコミットをひとつにまとめ、チェックアウト中のブランチへマージする
git merge --continue マージを続ける
git merge --abort マージを強制終了する
git merge --quit マージを中止する

git cherry-pick

コマンド 説明
git cherry-pick {コミットID} 対象コミットをチェリーピックする
git cherry-pick {始点の1つ前のコミットID}..{終点のコミットID} 始点から終点までのコミットをチェリーピックする
git cherry-pick {始点のコミットID}^..{終点のコミットID} 始点から終点までのコミットをチェリーピックする
git cherry-pick --skip 現在のコミットをスキップして、残りのシーケンスを続ける
git cherry-pick --quit 失敗したチェリーピックを取り消す

git stash

作成

コマンド 説明
git stash list スタッシュの一覧を出力する
git stash show スタッシュの変更を出力する
git stash -m "メッセージ" メッセージを付け、変更をスタッシュにプッシュする
git stash push -- <filepath> filepathのファイルのみ(複数可)をstashに入れる
git stash branch <branch-name> [stash@{n}] スタッシュから新しいブランチを作成し、そこに変更を適用する
git stash -k (--keep-index) ステージングしたファイル以外をstashに入れる
git stash -u (--include-untracked) untrackedも含めてstashに入れる

削除・適用

コマンド 説明
git stash apply スタッシュの変更をワーキングディレクトリに戻す(スタッシュから消えない)
git stash apply stash@{n} 特定のスタッシュを適用する
git stash pop スタッシュの変更をワーキングディレクトリに戻す(スタッシュから消える)
git stash pop stash@{n} 特定のスタッシュを適用して削除する
git stash drop stash@{n} n のスタッシュを削除する
git stash clear すべてのスタッシュを削除する

備考

コマンド 説明
git stash push -m "メッセージ" メッセージをつけてstashを作成。ただし、pushは省略可能
git stash save "メッセージ" push と同じ

スタッシュについては、以下の記事が参考になります。
https://qiita.com/chihiro/items/f373873d5c2dfbd03250

git reflog

git reflog(リフログ)は、「参照ログ (reference logs)」の略で、HEADやブランチの先端が過去にどのコミットを指していたかの移動履歴を記録するコマンドです。git resetrebaseなどで失われたように見えたコミットを救出するための強力な安全網として機能します。

一般的な使い方:

# reflogを表示
git reflog

# 出力例:
# 2a9e3b7 HEAD@{0}: reset: moving to HEAD~1  (← 間違ってresetした操作)
# f5a4e1c HEAD@{1}: commit: 新機能を追加 (← ここに戻りたい)
# c8b2a5d HEAD@{2}: checkout: moving from main to feature

# 戻りたい地点を指定してブランチを復元
git branch <新しいブランチ名> f5a4e1c

表示

コマンド 説明
git reflog HEADの移動履歴を一覧で表示する。git reflog show HEADとほぼ同義。
git reflog show <branch> 特定ブランチの移動履歴を表示する。

操作・復元

コマンド 説明
git reset --hard HEAD@{n} n番目の履歴の状態にブランチを強制的に戻す。最も一般的な復元方法。
git branch <new-branch> HEAD@{n} n番目の履歴が指すコミットから新しいブランチを作成する。安全に状態を復元したい場合に有効。
git checkout HEAD@{n} n番目の履歴の状態を一時的にチェックアウトする(分離HEAD状態)。中身の確認に便利。
git cherry-pick HEAD@{n} n番目の履歴が指すコミットを、現在のブランチにコピーする。

管理

コマンド 説明
git reflog delete HEAD@{n} 指定したn番目の履歴エントリーを削除する(通常はあまり使用しない)。
git reflog expire --all 期限切れの古い履歴をすべて削除する。

備考

ポイント 説明
ローカルのみの記録 reflogは各開発者のローカルリポジトリ内でのみ管理され、リモートリポジトリには共有されない。
究極の安全網 resetrebaseの失敗など、コミットが失われたように見えるほとんどのケースで、reflogから復旧できる。
自動的な期限切れ 履歴は永久には残らず、デフォルトでは90日など設定された期間を過ぎると自動的に削除される。

git log 応用

コマンド 説明
git log --oneline --graph --decorate --all Git Graph のようなログツリーをターミナル上で出力
git log --graph --name-status --pretty=format:"%C(red)%h %C(green)%an %C(Cyan)%ad %Creset%s %C(yellow)%d%Creset" ぼくのかんがえたさいきょうのぎっとろぐ

HEAD

HEAD

ORIG_HEAD

特定のGit操作(主にgit reset、git merge、git rebaseなど)を行う前のHEADの位置を一時的に保存するポインタ.

  • 主な使用法
    git resetgit mergeなどを実行する前の状態に戻りたい場合に使う.
    • 例:git resetgit reset --hard ORIG_HEAD
      • git resetを実行すると、その前のHEADの位置がORIG_HEADに保存される.
      • このポインタ(ORIG_HEAD)をもとに、git reset ORIG_HEADで操作を元に戻すことができる.
      • 参考:ORIG_HEADの使用例
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?