ステータス確認系
- git status : 状態の確認
- git show [ID] : 変更の確認
- git log : ログ確認
- git log --decorate : HEADつきのログを表示
- git log --oneline : ワンラインのログ表示
- git log --graph : ログをグラフ表示
- git log [branch] : 指定branchのログを見る
- git config -l : gitの設定を表示
- git cat-file -p [hash] : commit情報を確認
- git diff [id1] [id2] : 差分を確認
git remote 系
- ※originはリモートリポジトリの変数名のようなもの
- git remote : リモートの名前を表示
- git remote rm [name] : 設定削除
- git remote -v : originの向き先を確認
- git remote prune origin : リモートリポジトリを更新(state=消えていないブランチを消す)
originの設定変更
- git remote add [name] [remote repository] : リモートリポジトリの名前設定を付追加
- git branch --set-upstream master [name] : originの変更
git init 系
- git init : 新規リポジトリの作成
- git init --bare —shared : bareリポジトリの作成
- 作業ファイルがなく(裸)、管理ファイル(更新情報)のみ
- サーバー側のリモートリポジトリとして扱われる
- sharedオプションで共有設定
- bareの前にハイフンを二つつけないと内部構造がおかしくなる
- 変更状態のみ保持しているので、実際に作業したファイルは直接みれない
- ワーキングディレクトリをもたない
git clone 系
- git clone [対象リポジトリのuri] [clone場所] : cloneを作成
- clone場所に注意
git add 系
- git add [file] : インデックスにあげる
git commit 系
- git commit -m “message” [file] : コミットを行う
- mオプションをつけることで単一コメントが可能
- 新規ファイルやディレクトリも、add commitしない限り反映されない
- git commit -am [file] : 一度addしたファイルに対して、addとcommitとを同時に行う
- git commit —amend : 最新のcommit Messageを変更
- editerで編集することができる
- HashIDも変化するのでpullやpushする際は注意が必要
git push 系
- git push [リモートリポジトリのパス] [ローカルのブランチ名]:[リモートのブランチ名(正しくは特殊変数refspec)]
- 他リポジトリのbranchに変更を加える
- 引数の両ブランチ名が同じなら[branch]を一つ書くだけで省略できる
- 引数省略するとgitの設定により挙動が変わる場合があるので注意
- cloneしてきたリポジトリなら、リモートリポジトリのパスをoriginに省略できる
- --allオプション(宣言位置はどこでも)で、全てのローカルブランチをpushできる
- エラーメッセージ:
fast-forwards
は、最新ということを示す - 指定branchがremoteにない場合は新規作成される
- git push [remote] :[remote branch] で空を送る =remote branchの削除が可能
git fetch 系
- git fetch [remote repo] [branch]
- 他リポジトリのbranchから追跡ブランチを取得
- fetchで取得したブランチのcommitは、名前のないブランチとして取り込まれる
- これは、FETCH_HEADというブランチ名でチェックアウトできる
- 取得ブランチを取り込みたい場合はこのブランチをmergeするか、改めてpullすればいい
- [branch]を省略で全てのbranchを取得
- push時にconfrictが起きる状態で行うと、勝枝を増やしてくれる(= branchの取得)
- これは、リモートリポジトリの情報をローカルに持ってきているため
- git merge origin/master でmergingモードに入ることができconfrictを解消する必要はある
git pull 系
- git pull [リモートリポジトリのパス] [リモートのブランチ名(正しくは特殊変数refspec)]
- 他branchの変更をカレントbranchに取り込む
- pull自体、fetchのあとにmergeをするようなもの
- branchを省略した場合は、カレントbranchに[branch]がfetch → mergeされる(remote branchの追跡ブランチがローカルに残らない)
- 指定した[branch]に変更が加わるわけではないので注意
- エラーメッセージ:
non-fast-forward
は、最新でないという意味
- git pull --rebase
- pullした時の挙動が fetch → mergeから fetch → rebaseになる
git merge 系
- git merge [branch]
- カレントbranchに、選択branchを統合する
コンフリクト起こしたら
- 自分で該当箇所を編集 → add → commitすればいい
- confrict時のcommitメッセは残らないままでいい(再commit時のメッセージで統合されるので)
- push時のconfrictに関して、解消して再度pushをすれば、相手側で取り込む(pull)ものはconfrict解消済みのものを取り込める
- pull時のmerge messageでvimが開く場合は、「mergeを勝手にしたのでmerge messageを編集しろ」という意味
マージ時のconfrictを片方だけ採用したいとき
- git checkout --ours [file] : checkoutしているbranch側にあわせる
- git checkout --theirs [file] : mergeされたbranch側にあわせる
- confrict状態であれば、何回でも繰り返せる
- 解消後、add commitを忘れないように注意
git branch 系
- git branch : 現在のブランチを表示
- git branch -a : 追跡ブランチ(赤色)含むlocal branchを確認
- git branch -r : 追跡ブランチのみ確認
-
remotes/origin/HEAD->origin/***
はcloneした後に作業ディレクトリにcheckoutするbranchを表す
-
- git branch [branch] : 新規branch作成
- git branch [old_branch] [new_branch] : new branch を old branch に取り込む
- git branch -d [branch] : branchを削除
- DオプションでHEADにmergeされていないbranchも削除できる
- カレントbranchはcheckout後でないとdeleteできない
- git branch -m [old name] [new name] : branchの名前を変更
- git branch -m [new name] : カレントbranchの名前を変更
git checkout 系
- git checkout [branch] : branchに移動
- : 追跡ブランチを指定してリモートにアクセスすることも可能
- git checkout -b [branch] : 作成と同時に移動(branchのb)
- git checkout [ID] [file] : 特定のcommitIDの時点に戻す
- git checkout HEAD [file] : 最後にcommitした時点まで戻す =
git checkout [file]
- git checkout -b [branch] [origin/branch] : リモートブランチを[branch]の名前で取得して移動
git reset 系
- git reset --hard
- すべて(ワーキングツリー、インデックス、HEAD)を最新のcommit地点まで戻す
- git reset HEAD : HEADの位置とインデックスをHEADに動かす
- =
git reset --mixed HEAD
- addしたものを戻す
- ただしrmで消すのとは異なり、足跡が残る
- =
- git reset --hard HEAD~ : 1つ前のcommit状態に戻る
- git reset --hard HEAD~2 : 2つ前のcommit状態に戻る
- git reset softとhardの違い
- git reset --soft : ワークディレクトリの内容はそのままでコミットだけを取り消す。
- git reset --hard : コミット取り消した上でワークディレクトリの内容も書き換える。
git stash 系
- git stash : commit後の更新されていない変更を退避
- git stash list : 退避リストが見れる
- git stash pop : 元に戻す
- git stash apply : リストを残したまま戻す
- git stash save 'hoge' : stash自体に名前をつける
- ただし、名前からstashを取れるわけではない(メモリは一つなので)
- git stash drop : stashを削除
git tag 系
- git tag [val] : 最新のcommitにタグをつける
- checkoutでタグを指定して戻すことができる
git revert 系
- git revert [ID] : ID時のコミットのみを取り消す
- AA → BB → CC のコミット順序で、BBのIDをrevertすると、AAとCCのみ残る
- resetやcheckoutではBB以降のCCも消えてしまう
- revertを取り消すのは、
git revert --abort
- AA → BB → CC のコミット順序で、BBのIDをrevertすると、AAとCCのみ残る
git rebase 系
- git rebase [元になるbranch] [変更されるbranch(省略するとカレントbranch)]
- 他branchの変更を取り込み吸収する
- 履歴がわかりやすくなるというメリットがあり、複数のcommitを一つにできる。
- git rebase develop [branch]
- [branch]にdevelopを取り込む。headは[branch]になる
- rebaseの後は
git add
→git rebase --continue
を行う- rebaseは古い履歴から順にcommit単位でたどられるので、最新の情報とconfrictするわけではない
- つまり、過去のコンフリクトから順に解消してしなければならない
git rebase -i [ID(HEAD~[数値])]
- 指定したcommitの削除
- 修正したいIDの一つ前を指定
- 指定されたID以降のcommitがpickで表示される pick=そのまま利用
- pick idを消すとそのコミットが消される
- 指定したcommitの変更
- 修正したいIDの一つ前を指定
- 下の"pick"を"s"に書き換える → editerが再度立ち上がり、commit messageを変更できる
- 指定したcommitの編集
- 修正したいIDの一つ前を指定
- "pick"を"e"に書き換え
- (一時的に停止, コンフリクトしているので修正&addしろとmessage)vimで編集 →
git add
-
git commit --amend
で、commit message変更 -
git rebase --continue
で、rebaseの再開
##その他
インデックスからファイルをアンステージする(deleted logの削除)
- git rm [file]
- --cachedオプションでファイルは残す
- -rオプションでディレクトリ削除
- -fオプションで強制
ファイルをgitの対象外に指定したい
- .gitignore
- このファイルに追記したファイルはgitの対象外になる(トッラキングの対象外)
- ただし、一度インデックスに載ったことがあるファイルは後で.gitignoreにいれても対象外にならない。
-
git rm --cached [file]
でインデックスから降ろし、対象外にできる - 正規表現で判定されるので注意
その他 : 「No newline at end of file」が出た時
- 末尾に改行が含まれていないため、警告がでている状態
- vimにて、
:set binary noeol
実行で解決。