Linuxを日常的に使う実験ブログ

目的別にGitコマンドをまとめてみた

 2019-04-02

 2020-06-28

 Linux全般

こんにちは。今回のテーマは「目的別にGitコマンドをまとめてみた」です。筆者はCUIでGitを扱うことが多いのですが、コマンドを忘れてしまいネットで調べ直すことが多いので、今回は備忘録を兼ねてまとめて見ました。軽い気持ちで書いてみたのですが、案外量が増えてしまい焦りました。何かのお役に立てば幸いです。 [adsense02] 【目次】 リポジトリの作成(init) 設定関係(config) ステータスの確認(status) コミットログを見たい(log) 差分を確認する(diff) インデックスへの追加処理 取り消し処理(reset, checkout) ブランチ操作(branch, checkout) マージ処理(merge, cherrypick) リモートリポジトリの操作(remote) タグ操作(tag) リモートブランチへの操作(push, pull, fetch) 一時退避処理(stash) コミットの修正

リポジトリの作成(init)

Gitで管理を開始したい


$ git init

ベアリポジトリを作成したい


$ git init --bare

ベアリポジトリとは「裸のリポジトリ」ということであり、作業ディレクトリを持たず更新情報を保管するリポジトリでありリモートリポジトリはベアリポジトリで作成する。


設定関係(config)

設定は—globalオプションを付けるとグローバル設定の変更、つけないとローカル設定の変更となる ユーザー名、メールアドレスを設定したい


$ git config user.name "[ユーザー名]"
$ git config user.email "[メールアドレス]"

エディターを変更したい


$ git config core.editor '[エディターの設定]'

[設定例] editorをvimに変更する場合


$ git config core.editor 'vim -c "set fenc=utf8"'

ステータスの確認(status)

Gitのステータスを確認したい


$ git status

コミットログを見たい(log)

これまでのコミットログを見たい


$ git log

全てのブランチのコミットログを見たい


$ git log --all

コミットログをグラフィカルに出力したい


$ git log --graph

必要に応じてオプションを付ける。git log —helpでオプション調べられる —oneline:一行表示 —decarate:ブランチ名の表示形式(no, short, full) これまでのファイルの変更履歴を確認したい


$ git log -p [ファイルのpath]

差分を確認する(diff)

ワークツリーと最新コミットの差分を確認したい


$ git diff .

addする前のワークツリーにある特定のファイルの変更を確認したい


$ git diff -- [ファイルのpath]

ファイルパスがフィアルであることが明確であるならば’—‘は省略可能。 インデックスにaddされた全ファイルと最新コミットの差分を確認したい


$ git diff --cached .

インデックスにaddされているファイルの差分がみたい


$ git diff --cached [ファイルのpath]

現コミットと1つ前のコミットの差分を確認したい


$ git diff HEAD~..HEAD

あるコミットと別のコミットの差分を確認する


$ git diff [コミットID]..[別のコミットID]

インデックスへの追加処理

変更箇所を全てインデックスに追加(add)したい


$ git add .

もしくは


$ git add --all

もしくは 任意のファイルの変更箇所を部分的にインデックスに追加したい


$ git add -p [ファイルパス]
# y or nで追加処理

任意のファイルの変更箇所を行毎にインデックスに追加したい


$ git add -p [ファイルパス]
# eでエディタ起動して編集

[出力例]


取り消し処理(reset, checkout)

checkoutはブランチの切り替えだけでなくワークツリーのキャンセルにも用いられる。インデックスのキャンセルはresetを用いる。 ワークツリーの全ての変更をキャンセルしたい


$ git checkout HEAD .

ワークツリーの特定のファイルやディレクトリの変更をキャンセルしたい


$ git checkout HEAD [path]

[path]はファイルやディレクトリのパス ワークツリーの特定のファイルの行だけ変更をキャンセルしたい


$ git checkout -p [ファイルのpath]
#ここでeを選択しエディタで差分を修正

全てのaddをキャンセルしたい


$ git reset HEAD .

ワークツリーの変更も含めて全てのaddをキャンセルしたい (最新コミットに戻したい)


$ git --hard reset HEAD .

特定のファイルのaddをキャンセルしたい


$ git reset HEAD [ファイルパス]

addされたファイルの特定の部分をキャンセルしたい


$ git reset -p HEAD [ファイルパス]

ローカルブランチのコミットをキャンセルしたい(1つ前のコミットに戻したい)


$ git reset --hard HEAD^

コミット後に特定のファイルだけ別のコミット地点の状態まで戻したい


$ git checkout [コミットID] [ファイルパス]
$ git add .
$ git commit

ブランチ操作(branch, checkout)

ブランチの確認、作成はbranchコマンド、ブランチの切り替えはcheckout 現ブランチから分岐した別ブランチを作りたい


$ git branch [新ブランチ名]

ローカルブランチ一覧を確認したい


$ git branch

リモートブランチ一覧を確認したい


$ git branch -r

全てのブランチ一覧を確認したい


$ git branch -a

新ブランチを作成し、作成したブランチにチェックアウトしたい


$ git checkout -b [別ブランチ名]

別ブランチにチェックアウトしたい


$ git checkout [別ブランチ名]

ローカルブランチを削除したい


$ git branch -d [ブランチ名]

マージされていないブランチを強制削除したい


$ git branch -D [ブランチ名]

マージ処理(merge, cherrypick)

別のブランチをマージしたい


$ git merge [別ブランチ名]

別ブランチの特定のコミットだけマージしたい


$ git cherry-pick [コミットID]

リモートリポジトリの操作(remote)

リモートリポジトリ一覧を表示したい


$ git remote

リモートリポジトリを作成したい


$ git remote add [ショートネーム] [リモートリポジトリパス]

リモートリポジトリの名前を変更したい


$ git remote add [リモートリポジトリ] [新規名]

リモートリポジトリの情報を表示したい


$ git remote show [リモートリポジトリ]

タグ操作(tag)

タグの一覧を表示したい


$ git tag

現在のコミットにタグを紐づけたい


$ git tag [タグ名]

任意のコミットにタグを紐づけたい


$ git tag [タグ名] [コミットID]

指定したタグを削除したい


$ git tag -d [タグ名]

リモートブランチへの操作(push, pull, fetch)

最新のリモート情報を取得(fetch)したい


$ git fetch

ローカルブランチをプッシュしてリモートブランチを新規作成したい


$ git push origin [ブランチ名]

リモートには[ブランチ名]でブランチが作成されます。origin [ブランチ名]を省略した場合はローカルブランチ名で作成されます。 リモートブランチをローカルに取り込みたい


$ git fetch
$ git branch -a #リモートブランチの確認
$ git branch [ブランチ名] [リモートリポジトリ]/[ブランチ名]

[リモートリポジトリ]は多くの場合originが多い。 [実行例]


$ git branch branch1 origin/branch1

リモートブランチにpushしたい


$ git push [リモートリポジトリ] [ローカルブランチ名]:[リモートブランチ名]

[リモートリポジトリ]は多くの場合originが多い。省略された場合はorigin [リモートブランチ名]が省略されると[ローカルブランチ名]と同じブランチ名となる。 [実行例]


$ git push branch1

リモートブランチをPullしたい


$ git pull [リモートリポジトリ] [ブランチ名]

[リモートリポジトリ]と[ブランチ名]は省略可能 リモートブランチを削除したい


$ git push --delete [リモートリポジトリ] [ブランチ名]

もしくは


$ git push [リモートリポジトリ] :[ブランチ名]

リモートで削除されたリモートブランチをローカルにも反映させたい


$ git pull --prune

もしくは


$ git remote prune [リモートリポジトリ]

一時退避処理(stash)

一時退避(stash)を用いることで変更を加えた作業中の箇所を一時退避させ、ブランチ操作が可能となる。 作業中の処理を一時退避して保存したい


$ git stash

作業中の処理をメッセージつきで保存したい


$ git stash save="[コメント]"

保存した作業の一覧を確認したい


$ git stash list

一時退避した直近の作業に戻す(pop)したい


$ git stash pop

注意!:この波括弧はコマンドの一部です。説明用の記号ではありません。 POPすると一時保存されていた作業は削除されます。 一時退避した任意の作業を戻す(pop)したい


$ git stash list # 一覧の確認
$ git stash pop stash@{数字}

注意!:この波括弧はコマンドの一部です。説明用の記号ではありません。 POPすると一時保存されていた作業は削除されます。 一時退避した直近の作業を適用(apply)したい


$ git stash apply

注意!:この波括弧はコマンドの一部です。説明用の記号ではありません。 applyすると一時保存されていた作業は保存されたままです。 一時退避した任意の作業を適用(apply)したい。


$ git stash list # 一覧の確認
$ git stash pop stash@{数字}

注意!:この波括弧はコマンドの一部です。説明用の記号ではありません。 applyすると一時保存されていた作業は保存されたままです。 一時退避した作業を削除したい


$ git stash list # 一覧の確認
$ git stash drop stash@{数字}

注意!:この波括弧はコマンドの一部です。説明用の記号ではありません。 一時退避されている作業をすべて削除したい


$ git stash clear

コミットの修正

直近のコミットコメントを修正したい


$ git commit --ammend

直近以外のコミットのコメントを修正したい


$ git rebase -i HEAD~[数字]
# エディターで編集:修正したいコミットをeditに変更
$ git commit --ammend
# エディターで修正
$ git rebase --continue

最新コミットを含めて3つ目の修正をしたい時には3の数字を入れる [例:最新コミットより2つ前のコミットコメント修正] コミット時刻を修正したい


$ git rebase -i HEAD~[数字]
# エディターで編集:修正したいコミットをeditに変更
$ git commit --ammend --date="[修正したい時刻]"
$ git rebase --continue
# committer-dateとauthor-dateを一致させる
$ git rebase HEAD~[数字] --committer-date-is-author-date

最新コミットを含めて3つ目のコミットの時間を修正したい場合は[数字]に3を入れる。 [修正したい時間]の書き方は「Tue Apr 2 14:56:02 2019 +0900」のように書く いくつかのコミットをまとめたい


$ git rebase -i HEAD~[数字]
# エディターで編集:まとめたいコミットをfixupに変更

例えば、最新コミット(HEAD)含めて2つのコミットをまとめたいのであれば[数字]は2が入る この場合HEAD, HEADの2つのコミットがまとめられる。エディタが開くのでHEADはfixupとし、保存する

最後に

軽い気持ちでいつも使っているコマンドをメモ程度に書いておこうと思い、思いがけないボリュームになってしましました。Gitは便利で本当に助けられていますが、コマンド体系はやっぱり分かりづらい点が多いなと改めて思いました。この記事が何かのお役に立てば幸いです。 【関連記事】 Linuxで使えるGitクライアントを集めてみた [adsense]