Gitコマンドについてまとめ(備忘録)
はじめに
いままで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] ([設定値])
$ 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したいディレクトリ名])
git clone [リポジトリのURL] ([cloneしたいディレクトリ名])
ディレクトリ指定でcloneすることも可能。
rebaseとmerge編
○rebase
git 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
Author And Source
この問題について(Gitコマンドについてまとめ(備忘録)), 我々は、より多くの情報をここで見つけました https://qiita.com/ktr1211/items/5533916022e25ca1ac32著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .