Gitのまとめ

僕はオツムが弱いので基本的なことだけどメモしておく。
#Gitの概念
とりあえず三つある
1, 作業ディレクトリ
2, インデックス
3, リポジトリ(ローカル、リモート)
この三つの場所で色々やる。最終的にはリポジトリ内にファイルを保存することになる。


#コマンド
###設定
|git config -l|
|---|
|gitの設定を確認|

|git config --global ******|
|---|
|gitの設定 <br>ex) user.name, user.email, color.ui|

|git config --global alias.略語 [command]|
|---|
|gitコマンドのエイリアスを設定する。 <br>ex) git config --global alias.m merge|

|git config --help|
|---|
|git設定のhelpを表示|

---------------

###ファイル操作
|git init|
|---|
|今いる作業dirでgit使うよーっていう宣言|

|git add [file]|
|---|
|作業dir内の[file]をインデックスに追加。[file]を.(ピリオド)にすればカレントdir内全部のファイルを指定することになる|
|＊addしたくないファイル(.logファイル等)を指定するには、```vim .gitignore```でignore用のファイルを作成・展開し、その中で無視したいファイル名を指定する|

|git commit|
|---|
|インデックス内のファイルをローカルリポジトリにコミット。|
|option <br>-a: 変更されたファイルを自動的に感知し、addからコミットまで全部やってくれる。 <br>-m: メッセージを指定してコミットできる。-mなしだとvimが立ち上がって書く事になる。 <br>--amend: 直前のコミットを変更する。コミットログを無駄に増やしたくない時等に使える。|

|git log|
|---|
|コミット履歴(コミットID,製作者,日付,メッセージ)を表示|
|option <br>--oneline: 簡易的な履歴(ID上7桁,メッセージ)を表示。 <br>--stat: どのファイルが何箇所変更したかも表示。 <br>-p: 変更された箇所も表示。|

|git status|
|---|
|変更されたファイルの一覧表示|
|option <br>-s: 説明文を非表示。 <br>-d: 説明文を非表示。ブランチ名は表示。|

|git checkout -- [file]|
|---|
|作業dir内では変更したが、まだインデックスには保存していない[file]を変更前に戻す|

|git diff|
|---|
|作業dir内とインデックス内の違いを表示|
|option <br>--cached: インデックス内とローカルリポジトリ内の違いを表示。|

|git rm/mv [file]|
|---|
|普通にrm,mvしちゃうとgitが混乱するから、一度git initした作業dir内ではこのコマンドを使ってファイル操作しなければならない|

|git reset [target] [version]|
|---|
|[target]を部分を[version]まで戻す|
|[target] <br>--soft: ローカルリポジトリ内のみ。 <br>(no option): ローカルリポジトリ内とインデックス内。 <br>--hard: 全部(LocalRepoもIndexもWorkingDirも)|
|[version] <br>ID: コミットIDで指定。最低上7桁を含む。 <br>HEAD: 直前のコミット内容を指定。 <br>HEAD^: HEADの更に一つ前。 <br>ORIG_HEAD: 直前にresetしたコミットを指定。間違えてresetした時等に利用。|

|git tag [tag] [commitID]|
|---|
|[commitID]で指定したコミットに[tag]を付けることが出来る。<br>IDを指定しなかった場合、直近のコミット(HEAD)を指定することになる|

|git tag|
|---|
|タグの一覧を表示する|
|option <br>-d [tag]: [tag]を削除する|

|git show [tag]|
|---|
|[tag]コミットの詳細を表示する。[tag]はIDでも可|

------------------

###ブランチ
|git branch|
|---|
|今あるブランチを確認(デフォルトでmaster)|

|git branch [branch]|
|---|
|[branch]を作成|
|option <br>-d: [branch]を削除。|

|git checkout [branch]|
|---|
|[branch]へ移動|
|optional <br>-b [branch]: [branch]を作成し、移動。|

|git merge [branch]|
|---|
|[branch]をカレントブランチへmerge(混ぜる)|

-------------------

###共有リポジトリ
共有リポジトリを作る時はディレクトリ名の最後に.gitを付けるのが鉄則。

|git init --bare|
|---|
|共有リポジトリのgit宣言をする時はoptionとして--bareを付ける|

|git remote|
|---|
|別のリポジトリを操作する際に使用するコマンド <br>オプションとして-vを付けるとリモートリポジトリの詳細を表示する|

|git remote add [repository] [position]|
|---|
|リモートリポジトリ[repository]を生成する。[position]で指定したディレクトリを参照する。URL([position])さえ覚えておけばやる必要は無いが、普通やる <br>ex) git remote add origin https://github.com/hogehoge/gitTest.git|
|＊リポジトリのURLを間違えたりすると設定したremoteを取り消したくなる。 <br>git remote -v: 設定したリモートを確認 <br>git remote rm [repository]: 指定したremote設定を削除 <br>で取り消すことができる。|

|git remote rm [repository]|
|---|
|リモートリポジトリ[repository]を削除する|

|git push [repository] master|
|---|
|リモートリポジトリ[repository]にローカルリポジトリの内容をプッシュする。ローカルのmasterブランチをリモートのmasterブランチに反映させている|

|git clone [remoteRepository] [workingDir]|
|---|
|[remoteRepository]の中身を新たな作業dir[workingDir]として複製する。<br>リモートリポジトリへのリンクもそのまま引き継ぐ <br>ex) git clone ~/origDir/ cloneDir|

|git fetch|
|---|
|リモートリポジトリの内容をリモート追跡ブランチにコピーする|

|git pull [remoteRepository] master|
|---|
|[remoteRepository]のブランチmasterからプル(プッシュの逆)。fetchとmergeを組み合わせた様なもの|
|git fetch <br>git merge origin/master <br>と同じ


##注意点
mergeやpushをする時は他の人が同箇所を変更している等で、conflictがよく発生する。
pull, fetch, rebaseを使ってなんとかしよう。


#参考URL
・サルでも分かるgit入門:
http://www.backlog.jp/git-guide/
・git pullの解説: 
http://kray.jp/blog/git-pull-rebase/
・pushがrejectされた時の対処: 
https://www.softel.co.jp/blogs/tech/archives/3569
・push, origin, masterとはなんぞや:
http://dqn.sakusakutto.jp/2011/10/git_push_origin_master.html