LoginSignup
1
0

More than 3 years have passed since last update.

Gitコマンドについてまとめ(備忘録)

Last updated at Posted at 2020-01-31

はじめに

いままでSourceTreeに頼ってgitコマンドについて
おろそかになっていたので自分のためにもまとめます。コマンドを通して、Gitの仕組みも改めて冷静に見ていきたい。
備忘録シリーズその4?(数えてない)

そもそもGitとは?な場合↓が個人的に一番わかりやすいと思います。
サルでもわかるGit入門https://backlog.com/ja/git-tutorial/intro/01/

複数人で同じファイルの差分を共有・管理するための仕組みのことですね。

いきなりですが、下記に良く使う(はず)のコマンドをまとめていきます。

確認用コマンド

①全体の変更を確認する

$ git status

変更点の現在の状態を見る。addしたファイル、commitしたファイル、conflictしたファイルなどが確認できる。

②特定のディレクトリ・ファイルの変更を確認する

$ git status [ディレクトリパス or ファイルパス]

ディレクトリを指定すると、その箇所の変更点のみ確認できる。
指定しないと全管理対象の変更点が確認できる。

○変更の履歴を見る

$ git log [オプション]

作業ブランチの履歴を見ることができる。

オプション 説明
--oneline ハッシュ値+commitメッセージの1行目を見ることができる
--graph ブランチの分岐を確認できる。(GitLabのNetworkのようなものでツリーを把握する際に良い)
-p コミットの変更点を見ることができる
-p[ファイルパス] そのファイルの変更点を見ることができる
--author=[ユーザー名] 指定したユーザーのcommitメッセージを見ることができる
--grep [検索文字列] 検索文字列に合致するコミットのみ表示できる
--name-only 変更したファイル名のみ表示(-pと併用した場合、こちらが優先)

○トピックブランチに対する変更内容を見る

master ブランチに対して、トピックブランチに関してどのようなcommitがあったかを確認する

git log master..[トピックブランチ名]

○変更点をadd(追加)する

$ git add [ファイルパス]

設定方法 説明
-u [削除済ファイルのパス] ファイルの削除履歴をaddする
インデックスにファイルを登録する。ディレクトリ指定可能。

○変更点をcommit(確定)する

$ git commit [オプション]
オプション 説明
-m "commitメッセージ" 1行のコミットメッセージを付けてcommitができる
--allow-empty 空commitの作成(-mと併用できる)

○変更点をpush(通知)する

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

○差分を抽出する

$ git diff [オプション] ([設定値])
設定方法 説明
オプションなし 全体の差分を抽出する
--name-only 差分があるファイル名のみ抽出する
[ディレクトリパス] 特定のディレクトリの差分を抽出する
[ファイルパス] 特定のファイルの差分を抽出する
[old_commit][new_commit] commit同士の差分を抽出する

○修正者を確認する

git blame [ファイル名]

○指定したcommitの変更点を見る

$ git show [commitのハッシュ値]

○変更点を一旦退避させる

作業している最中に別ブランチをMergeするなどの操作が必要なときに使います。

$ git stash [オプション] ([設定値])

本来はgit stash saveだが、saveは省略できる。

設定方法 説明
save "コメント" コメント付きで一旦退避できる
list 現在退避させている変更点の一覧を表示
pop 退避させた変更点を再度適用する
clear 退避させている変更点を全て削除する
drop 1つずつ削除。何も指定しなければ最新のもの、dropの後に引数を指定すれば特定のものを削除可能)

ブランチ操作編

○ブランチの作成・削除

$ git branch [オプション] [ブランチ名1] ([設定値])
設定方法 説明
プションなし 新規ブランチの作成
-d [ブランチ名1] ブランチの削除
-D [ブランチ名1] ブランチの強制削除
-m [ブランチ名1][ブランチ名2] ブランチ名1からブランチ名2へ名前を変更
-l [ブランチ名1][commitのハッシュ値] 特定commitでブランチを切る
-vv 全ブランチのHEADを確認する

○作業ブランチの変更(チェックアウト)

$ git checkout[オプション] [ブランチ名]   
オプション 説明
-b 指定したブランチ名でブランチを作成し、チェックアウトする

○[cf]ブランチを切るとどうなるか

特定のワークツリーからブランチを切ると、新しいブランチのHEADは切ったワークツリーのHEADと同じ状態になる。

branchA:HEAD 1
branchB:HEAD 2
branchC:HEAD 3
branchAで新しくブランチを切ったとき
branchA:HEAD 1
branchB:HEAD 2
branchC:HEAD 3
branchD:HEAD 1

#履歴操作編

間違った操作をしてしまったり、変更を取り消す必要がある際などに良く使うコマンド。

○「HEAD^」についてHEAD^はワークツリーの最初のcommit。

「^」を増やすと次のcommitになる。以降、「HEAD^」と記載した箇所は「^」を増やせば次のcommitを指定できる。

○addを取り消す

$ git reset HEAD [ファイル名]

○commitを取り消す

$ git reset [オプション] HEAD^
オプション 説明
--soft commitのみ取り消し、ファイルの変更は残す
--hard commitもファイルの変更も全て取り消す

○commitメッセージを修正する

直前のcommitメッセージを直す場合は下記のようになる。

$ git commit --amend

直前でない場合、git rebase -i を参考のこと。

○commitを打ち消す

あるcommitを打ち消す。commit履歴は残したままその変更をなかったことにできる。

$ git revert [commitCのhash値]

commitメッセージはRevert [指定したcommitのcommitメッセージ]になる。

○commitした中の1ファイルだけ取り消す

複数ファイルでcommitしたが、1ファイルだけ戻したいときに使う。

$ git checkout [commitのハッシュ値] ファイルパス

○pushしたcommitを取り消す

$ git push -f origin HEAD^:[ブランチ名]

○commitを別ブランチのHEADに移動する

commitを移動先ブランチへ移動し、下記コマンドを使う。conflictしやすいので注意する。

○git rebase -i でcommitメッセージの修正やcommitの統合を行う

$ git rebase -i [ハッシュ値 or HEAD^]

①commitメッセージの修正
変更したいcommitメッセージの左横にあるコマンドを「reword」にして保存
新しいcommitメッセージを書いて保存
②commitをまとめる
まとめたいcommitメッセージの左横にあるコマンドを「squash」にして保存
pick [ハッシュ値] commitA
squash [ハッシュ値] commitB

○git reflogを使って過去の履歴に戻る

$ git reflog

上記コマンドを打つと、下記のようなログが出る。

[ハッシュ値] HEAD@{0}: 処理: 処理の詳細
[ハッシュ値] HEAD@{1}: 処理: 処理の詳細
[ハッシュ値] HEAD@{2}: 処理: 処理の詳細


git reset --hard を使用し、HEADの位置をずらす。

git reset --hard HEAD@{X}
ちなみに ブランチに関わらずHEADが指定したものになるっぽいので注意。

#Git設定編

○リポジトリの作成をする

①Gitリポジトリをカレントディレクトリに作成する
$ git init
②Gitリポジトリを特定のディレクトリに作成する
$ git init [ディレクトリパス]
③ベアリポジトリ 2 を作成する
$ git init --bare [ディレクトリパス]

○ユーザー情報を設定する

$ git config --global user.name "あなたの名前"
$ git config --global user.email "あなたのメールアドレス"
最低限上記の内容は設定しないとエラーになる。
他にも下記のようなものがある。

○Gitの出力をカラーリングする

$ git config --global color.ui auto

○Gitのエイリアスを設定する

$ git config --global alias.co checkout

○日本語のファイル名を表示できるようにする

$ git config --local core.quotepath false

○エディタをvimにする

git config --global core.editor 'vim -c "set fenc=utf-8"'

○Gitの設定を確認する

$ git config --global --list

※--globalを設定していない場合は--globalは不要です。

○gitの設定ファイルについて

グローバルは~/.gitconfig 、リポジトリ毎は.git/configに保存されている。
コマンドを打つと保存される。

【便利な設定】git logを見やすくする
参考サイト
https://blog.toshimaru.net/git-log-graph/

○ブランチの設定をする

.git/configを設定する。
これにより、originを省略することも可能。

【設定コマンド】push/pull時の origin master を省略する
下記コマンドを打つと.git/configに設定が追記される。
設定後はgit pull git pushでOKとなる。

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

よく使う設定はconfigに書いて常に有効にしておくと良さそう。

○リモートリポジトリの参照を確認

$ git remote -v

設定されている全てのリモートリポジトリが確認できる。

○リモートリポジトリの参照を追加

$ git remote add [任意の名前] [Gitリポジトリ]

○リモートリポジトリの参照を削除

$ git remote rm [任意の名前]

○.gitignore

Gitの管理外ファイルを設定する。
リポジトリ下に配置。

Git対象ファイル操作編

○Git管理対象ファイルのファイル名を変更

git mv [変更前ファイル名] [変更後ファイル名]
新規ファイルではなく、変更ファイルとして扱われる。

リポジトリ取得編

○リポジトリをcloneする

git clone [リポジトリのURL] ([cloneしたいディレクトリ名])

ディレクトリ指定でcloneすることも可能。

rebaseとmerge編

○rebase

git rebase [取り込みたいブランチ名]

AブランチにBブランチを取り込みたい場合はAブランチに移動してから。

git checkout A
git rebase B

rebaseの特徴
履歴を付け替える。
rebaseすると取り込み側のcommitIDが変わるのでリモートにpushする側のブランチではrebaseしない方がよい。

○merge

git merge [取り込みたいブランチ名]

AブランチにBブランチを取り込みたい場合はAブランチに移動してから。

git checkout A
git merge B

mergeの特徴
履歴を合流させる
commitIDはそのまま

Fast-Forword:MergeCommitを作らない(履歴が分岐していない)
Non Fast-Forword:MergeCommitを作る(履歴が分岐している)

merge or rebaseを間違った直後に取り消したいとき

git reset --hard ORIG_HEAD

[cf] pull
pull = fetch + merge
pull --rebase = fetch + rebase

参考:
サルでもわかるGit入門
gitコマンドを体系的に覚えよう
gitコマンドの基本的な使い方
美しき git log --graph のエイリアス
pimping out git log

1
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
1
0