🚀

Gitコマンド一覧

2021/11/30に公開約11,700字

Gitコマンド一覧

備忘録

グローバルオプション

全てのコマンド共通のオプション。
コマンドの前に指定する。

オプション 説明 備考
-c [config-name] [parameter] 設定値を上書きする

clone

git clone ブランチ名(もしくはURL)

リモートリポジトリのブランチを複製してカレントディレクトリに保存する。
その際、ローカルリポジトリも作成される。

init

# カレントディレクトリ
git init
# ディレクトリを指定
git init ディレクトリ名

ローカルリポジトリを新規作成する。
コマンド実行後に指定したディレクトリが管理対象となり、「.git」ディレクトリが作成される。

remote

# リモートリポジトリ名を表示
git remote
# リモートリポジトリ名とURLを表示
git remote -v

リモートリポジトリの操作を行う。
リモートリポジトリはリモートリポジトリ名/ディレクトリパス(URL)で構成される。
デフォルトのリモートリポジトリ名はorigin。(リモートリポジトリ名はURLのエイリアス)

remote add

git remote add リモートリポジトリ名 URL
# ローカルリポジトリにgithubに作成されたリモートリポジトリを登録する
git remote add origin https://github.com/github-username/repository

ローカルリポジトリにリモートリポジトリを追加する。

remote rm

git remote rm リモートリポジトリ名

リモートリポジトリを削除する。

remote set-url

git remote set-url リモートリポジトリ名 URL
# originのURLをsshに変更する例
git remote set-url origin ssh-hostname@github.com:user/repository.git

リモートリポジトリのURLを変更する。

remote rename

git remote rename 変更前 変更後
# originをhogeに変更
git remote rename origin hoge

リモートリポジトリ名を変更する。

remote show

git remote show リモートリポジトリ名

リモートリポジトリの詳細情報を表示する。

branch

# ローカルリポジトリのbranchを一覧表示
git branch
# リモートリポジトリのbranchを一覧表示(git fetchしておくこと)
git branch -a
# branchを削除(mergeされていないbranchのみ)
git branch -d ブランチ名
# branchを削除
git branch -D ブランチ名

ローカルリポジトリのブランチを操作する。

checkout

# ブランチの切り替え
git checkout ブランチ名
# コミットの切り替え(ステージングの内容はそのまま)
git checkout コミット値
# ブランチの作成
git checkout -b ブランチ名

ブランチの作成や切り替えを行う。
また、作業を行ったブランチを元に戻す。
コミットの切り替えも可能。
(後述のgit switchとgit restoreに機能を分割)

リモートリポジトリから取得

ローカルリポジトリに存在せず、リモートリポジトリに存在するブランチを指定した場合、リモートのブランチの内容をコピーしたローカルリポジトリを作成する。

特定ブランチのファイル/ディレクトリを取得

# 取得データはステージングに反映される
git checkout 対象ブランチ名 ファイルパス|ディレクトリパス
# ファイル名を変更して取得
git checkout 対象ブランチ名:ファイルパス|ディレクトリパス > リネーム名

指定したブランチのファイル、もしくはディレクトリをカレントブランチに適用する。

switch

# ブランチの切り替え
git switch ブランチ名
# ブランチの作成
git switch -c ブランチ名
# 強制的に作成
git switch -C ブランチ名
# デタッチモードでブランチを作成
git switch -d ブランチ名

ブランチの切り替えや作成を行う。

restore

# ステージングに反映していないファイルを元に戻す
git restore .   # 全て戻す
git restore ファイル名
# ステージングの内容を元に戻す
git restore --staged ファイル名
# コミットの切り替え(ステージングの内容を削除)
git restore -s コミット値

ブランチの作業内容を元に戻す。

add

# 全ファイル
git add .
# 変更ファイルのみ
git add -u
# ファイルを指定
git add ファイル名
# 変更されたファイルのみステージング
git add -n .; git diff —name-only

指定したファイル名、もしくはオプションに応じたファイルをステージングする。

「git add -u」でステージングを行うと削除ファイルもインデックスに反映される。

status

git status
# 省略表示
git status -s

ステージングされたファイルの一覧を表示する。

rm

git rm 削除ファイル名

削除したファイルを指定し、ステージングする。

リモートリポジトリに削除ファイルを反映するにはrmでステージングを行った後にコミットする必要がある。

commit

git commit
# コミットメッセージを付与
git commit -m “コミットメッセージ”

インデックスに登録されたファイルをリモートリポジトリにコミットする。

push

git push
# 実行内容の確認(実行はされない)
git push -n

ローカルリポジトリの変更内容をリモートリポジトリに送信し、コミットを更新する。

pull

# リモートリポジトリの全ての変更内容を取得
git pull
# 指定したリポジトリのブランチの変更内容を取得
git pull リモートリポジトリ名 ブランチ名
# デフォルトのリモートリポジトリ名はorigin
git pull origin ブランチ名

リモートリポジトリの内容を取得し、作業中のブランチに取り込む。(fetchとmergeを同時に行う)

(マージ後、「esc」+「:」+「q」を入力)

pull —rebase

git pull —-rebase リポジトリ名 ブランチ名

マージを行う際は通常プルリクエスト先準拠でコミットを統合するが、--rebaseオプションを付与するとプルリクエスト元準拠で統合する。

プルリクエスト元準拠なのでマージコミットが発生しない。

conflict

マージ後、「CONFLICT (content): Merge conflict in .....」 と表示されたファイルは変更内容がコンフリクト(衝突)している。

該当ファイルを開くとコンフリクト箇所は「HEAD」で区切られるので修正を行った後「git add 該当ファイル名」を実行。

fetch

git fetch
git fetch ブランチ名
git fetch リモートリポジトリ名/ブランチ名

ローカルリポジトリとリモートリポジトリを同期し、変更情報を取得する。

ブランチ名を指定した場合、指定したブランチの変更情報を取得する。

変更情報はリモート追跡ブランチに保存される。(ワークツリーに影響はない)

merge

git merge ブランチ名

ローカルブランチ内の別ブランチの全コミットを作業中のブランチにマージする。

また、fetchしたブランチのマージを行う際に指定する。

marge reset

git merge —abort

マージ後に編集を行なっていなければ上記コマンドでリセット出来る。

cherry-pick

git cherry-pick コミット値
# 複数選択も可能(選択順にマージ)
git rebase コミット値1 コミット値2 コミット値3 ...

指定したコミットを作業中のブランチにマージする。

rebase

# カレントディレクトリのコミットを指定したブランチに適用
git rebase ブランチ名
# 適用元のブランチを第二引数に指定可
git rebase コミットを適用するブランチ 元となるブランチ

# rebase確認メッセージのスキップ
git rebase --continue
# rebaseのスキップ(conflict解消に利用)
git rebase --skip
# rebaseの中断
git rebase --abort

指定したブランチのコミットをカレントブランチに適用し、コミットを再編成する。

再編成の際、重複しているコミットはスキップされる。

また、コミットを別ブランチの指定位置に移動させたり、複数コミットを一つのコミットに再定義したりできる。

破壊的な履歴変更を行うため、他メンバーのpull/pushに支障が出る恐れがある
そのため、push済みコミットのrebaseは絶対に行わないこと(pushしていないローカルブランチにのみ適用)

参考1
参考2

rebase -onto

git rebase -onto ブランチ 派生ブランチ1 派生ブランチ2

派生ブランチ1からcheckoutされた派生ブランチ2のコミットのみブランチに適応する。

git rebase -onto main develop feature/local

上記のように指定するとfeature/localがmainではなくdevelopからブランチを切っていた場合にdevelopの内容を排除できる。

rebase -interactive

git rebase -interactive コミット値
# -iに省略可能
git rebase -i コミット値
# git configで起動するエディタは指定できる(デフォルトはvim)

インタラクティブモードでコミットの編集ができる。
実行すると以下の編集モードが開かれ、編集したい内容に応じてキーワードを指定して編集を行う。

キーワード コミット値 コミットメッセージ
キーワード コミット値 コミットメッセージ
キーワード コミット値 コミットメッセージ
...

rebase -interactive キーワード

キーワード 機能
pick | p 現状維持(デフォルト)
reword | r コミットメッセージを変更
edit | e ファイルを修正
squash | s 直前のコミットと統合
fixup | f 直前のコミットと統合(コミットメッセージの変更なし)
exec | e shellで実行

rebase -interactive 編集例

~ $ git log --onlline

# 以下の3つのコミットがある
xxxxxx add: ファイルの追加
yyyyyy update: ファイルの更新
zzzzzz fix: ファイルの修正

~ $ git rebase -i xxxxxx

# 以下の編集画面が表示される
pick yyyyyy update: ファイルの更新
pick zzzzzz fix: ファイルの修正
# rebase xxxxxx..zzzzzz onto xxxxxx
# ...

# 目的に応じて編集して保存
pick yyyyyy update: ファイルの更新
reword zzzzzz fix: xxxをyyyに修正
:wq

~ $ git log --onlline

# 変更されている
xxxxxx add: ファイルの追加
yyyyyy update: ファイルの更新
zzzzzz fix: xxxをyyyに修正

show

git show コミットのハッシュ値 or HEAD

指定したコミットの履歴を参照する。

log

git log [ブランチ]or[ファイル名]

コミットの履歴と詳細を表示する。

また、コミット履歴の検索も可能。

引数にブランチやファイル名を指定した場合、指定した引数に関連するログのみを出力。

log --online

git log —-online

コミット値とメッセージのみ表示する。

log -S

git log -S “検索値”

コミットメッセージとコミット内容を検索する。

log -grep

Git log -grep=“検索値”

コミットメッセージのみを検索する。

log —since / log —until

git log —since=yyyy-mm-dd
git log —until=yyyy-mm-dd
git log —since=yyyy-mm-dd —until=yyyy-mm-dd

—sinceは指定日付以降のログを表示する。

—untilは指定日付以前のログを表示する。

組み合わせることで出力範囲の絞り込みができる。

reflog

git reflog

コミットの履歴を表示する。

削除したコミットの履歴も確認できる。

「reset —hard」でコミットを巻き戻すときの履歴の確認に役立つ。

reset

git reset オプション コミット値

# 例
# どちらも現在作業中のコミットのインデックスを削除する
git reset --mixed HEAD
git reset HEAD

インデックスに登録されたファイル一覧を削除したり、ブランチをコミット前の状態に戻す操作を行う。

resetコマンドではリセットしたい内容に応じて主に「—soft」「—mixed」「—hard」の3つのオプションを指定する。

リセットはローカルリポジトリ内に反映される。

reset --soft

git reset --soft コミット値

コミット値に指定したコミットを削除する。

インデックスとワーキングツリーはそのまま。

コミット値にHEAD^を指定することで直前のコミットを取り消す。

reset --mixed

git reset --mixed コミット値

コミット値に指定したコミットとインデックスを削除する。

addコマンドでステージングした内容を削除する場合に指定する。(オプションを省略した場合の引数はmixed)

reset --hard

git reset --hard コミット値

コミット値に指定した「コミット」「インデックス」「ワーキングツリー」全て削除する。

作業中の内容を全てリセットする場合に指定する。

直前のリセットの取り消し

# 「ORIG_HEAD」をコミット値に指定すると直前のリセットを取り消しできる
git reset --hard ORIG_HEAD

revert

git revert コミット値

指定したコミットの打ち消しを行う。

stash

git stash

作業中ブランチの内容を退避する。

作業内容はスタッシュとして「WIP on {作業ブランチ名}: {親コミット値} {親コミットメッセージ}」で保存される。

コミットせずにブランチの切り替えを行いたいときや、作業するブランチを間違えたときに使用する。

スタッシュすると作業中のコミットの変更がリセットされ、applyやpopで退避した内容を戻すと再度適用される。

stash push

git stash push [ファイル名][ファイル名]

ファイルを指定して退避する。

stash apply

git stash apply
git stash apply stash@{番号}

退避したスタッシュを作業中のブランチへ適用する。

退避したスタッシュが複数ある場合はstash@{番号}で指定出来る。

stash save

git stash save “任意のコメント”

スタッシュの内容に任意のコメントをつける。

stash list

git stash list

保存したスタッシュの一覧を表示する。

stash show

git stash show

保存したスタッシュの詳細を表示する。

stash pop

git stash pop
git stash pop stash@{番号}

退避したスタッシュを作業中のブランチに適用する。

applyとは違い、適用後に保存したスタッシュをlistから削除する。

stash drop

git stash drop
git stash drop stash@{番号}

直前のスタッシュを削除。

番号を指定した場合、該当のスタッシュを削除できる。

(競合が発生した際に別ブランチに復元→編集→checkoutなどで復元する用途などで使用)

stash clear

git stash clear

スタッシュを全て削除。

stash branch

git stash branch ブランチ名

スタッシュのpopを行う際、新規にブランチを作成して適用する。

ブランチはstashしたブランチのコミットから作成される、

checkout stash

git checkout stash@{番号} ファイル名

指定したファイルをスタッシュから適用する。

スタッシュは削除されない。

stashの復元

stashした内容を誤ってclearしてしまった場合は下記を参考にする。

https://qiita.com/shotakeu/items/430a09dddeeac444dcf6

diff

# ステージングした内容を表示
git diff —cached
git diff —staged
# 前回コミット時の内容と比較
git diff HEAD^
# コミット同士を比較
git diff 変更前コミット値 変更後コミット値
# ローカルブランチ同士を比較
git diff ブランチ名1 ブランチ名2
# ローカルリポジトリとリモートリポジトリの比較
git diff ローカルブランチ名 リモート名/ブランチ名
git diff HEAD origin/ブランチ名
git diff origin/ブランチ名 HEAD (push箇所の確認等)
# ファイルの変更点の表示
git diff — ファイルパス
git ブランチ名1 ブランチ名2  — ファイルパス
# 変更内容をゲージで表示
git diff —stat
# 変更されたファイルのパスのみ表示
git diff ブランチ名|コミット値 --name-only
# 空白や改行コードの違いを無視
git diff -w
# 空行を無視
git diff —ignore-blank-lines
# 差分を上側に表示
git diff -compaction-heuristic

コミットやローカルブランチとリモートブランチの差分を表示する。

索引

コマンド 実行内容
clone リポジトリのクローンを作成する
init リポジトリを新規作成する、または既存のリポジトリを初期化する
remote リモートリポジトリを関連付けする
fetch リモートリポジトリの内容を取得する
pull リモートリポジトリの内容を取得し、現在のブランチに取り込む(「fetch」と「merge」を行う)
push ローカルリポジトリの変更内容をリモートリポジトリに送信する
add ファイルをインデックスに追加する(コミットの対象にする)
rm ファイルをインデックスから削除する
mv ファイルやディレクトリの名前を変更する
reset ファイルをインデックスから削除し、特定のコミットの状態まで戻す
revert コミットの打ち消しを行う
status ワークツリーにあるファイルの状態を表示する
show ファイルの内容やコミットの差分などを表示する
diff コミット同士やコミットと作業ツリーの内容を比較する
commit インデックスに追加した変更をリポジトリに記録する
tag コミットにタグを付ける、削除する、一覧表示する
log コミット時のログを表示する
grep リポジトリで管理されているファイルをパターン検索する
branch ブランチを作成、削除、一覧表示する
checkout 作業ツリーを異なるブランチに切り替える/変更をリセットする
switch 作業ツリーを異なるブランチに切り替える
restore ファイル、ステージング、コミット等の変更をリセットする
merge 他のブランチやコミットの内容を現在のブランチに取り込む
rebase コミットを再適用する(ブランチの分岐点を変更したり、コミットの順番を入れ替えたりできる)
config 現在の設定を取得、変更する

Discussion

ログインするとコメントできます