Gitについてまとめメモ Git
Gitを仕事で使いそうなのでちょっと勉強
参考URL
http://qiita.com/YusukeHosonuma/items/14c59f3878d640a401a1
http://www.slideshare.net/kotas/git-15276118
http://www.slideshare.net/matsukaz/git-17499005?related=1
------------------------------------------------
http://www.slideshare.net/matsukaz/git-17499005?related=1
subversionとgitでは commit のやる内容が違う
■subversionの場合
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705928.png  alt=   width= 400  height= 321  class= pict  />
subversion
 commit:リポジトリ(共有サーバー上の)
 update:ローカル更新
■gitの場合
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705929.png  alt=   width= 400  height= 300  class= pict  />
git
 commit:ローカルリポジトリ反映
 push :ローカルから、リモートリポジトリへ反映
 fetch :リモートリポジトリから、更新を取得
 merge/rebase:リモートリポジトリの更新をローカルに反映させる
gitではほとんどの操作が、ローカルで完結する
(push fetch以外) 
■データ領域
gitで大事なデータ領域は3つ
・ワークツリー(作業ディレクトリ)
・ステージングエリア(インデックス)
・Gitリポジトリ
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705930.png  alt=   width= 400  height= 321  class= pict  />
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705931.png  alt=   width= 400  height= 321  class= pict  />
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705932.png  alt=   width= 400  height= 321  class= pict  />
git init  git管理を開始する
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705933.png  alt=   width= 400  height= 321  class= pict  />
git add <filepattern>
 リポジトリに追加したい対象を指定する
ファイルを修正した場合も git add
 git add .  「.」はすべての未登録ファイルがステージされる
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705934.png  alt=   width= 400  height= 321  class= pict  />
git commit -m <msg>
 更新内容をリポジトリに登録する
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705935.png  alt=   width= 400  height= 321  class= pict  />
git rm <file>
 ファイルを削除する
 git rm dir1/dir2
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705936.png  alt=   width= 400  height= 321  class= pict  />
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705937.png  alt=   width= 400  height= 321  class= pict  />
rmでファイル削除後はその内容を反映(コミット)させる
git mv :ファイルやディレクトリを移動する
git status :ワークツリーの状態をみる
git log :コミットログをみる
ブランチとはメインと、別の流れで作業を続ける機能
git merge <branch>:現在のブランチに指定ブランチをマージする
git clone <url>:リモートリポジトリを ローカルに複製
 git clone git@github.com:a/b.gif
<img src= http://img-cdn.jg.jugem.jp/3eb/1172978/20151229_705938.png  alt=   width= 400  height= 321  class= pict  />
------------------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
http://www.slideshare.net/kotas/git-15276118
% git checkout -b foo master(= git checkout -b foo 4714e3cf1826) ブランチ名の代わりにリビジョンを指定も可能
% git show master           (= git show 4714e3cf1826)
% git branch topic master   (master から topicをつくる) ブランチをつくることは、こみっとのさらなる別名をつくるのと同じ
★マージ
gitのマージには2種類ある(Fast-Forward 早送り:元が変更されてないなら使えそう/ Non Fast-Forward 早送りではないマージ:元が変更されてた後なら、使えそう)
---------------------
git merge topic  歯や送りできればする、無理なら普通のマージ
git merge --no-ff topic 常に普通のマージ
git merge --ff-only topix 常に早送りする(できなければエラーとする)
---------------------
Fast-Forwardの弊害1 ブランチをマージしたという事実がれきし(コミットグラフ)に残らない
git revert <commit> 
<commit>(リビジョン)のコミットを取りけすためのコミットをつくる
git reset --hard <commIt>
<commit>(リビジョン)時点の状態まで完全にまきもどす
Fast-Forwardの弊害2
ブランチのマージを取りけしづらい
■まとめ 2種類のマージ
---------------------------------
Fast-Forward : 早送り
 ・コミットグラフとしてけっかが同じなら、同じコミットまで進めてしまうこと
 ・「マージした」という記録が残らない
 ・マージを取りけしづらい
Non Fast-Forward 普通のマージ
 ・gitが頑張って計算するマージ
---------------------------------
★rebase
git rebase master
masterから取得し、その上にこれまでの変更点を反映させる
rebaseで創られたコミットは、元のコミットとほぼ同じ内容だが別のコミットになる
(中にある1つ前の内容が違うので、正しくは別のコミットは別物)
★git push origin topic
topic を origin(サーバー)に同期
localにあるコミットされてる内容をサーバーにアップする
pushされているブランチを rebaseすると pushできなくなる
よって共有のブランチでは、rebaseしてはいけない。
絶対NGなの。push -f
push -f で強制で上書きpush可能だが、他の人がpullする時にマージする必要があったり
コミットログがおかしなことになるのでしてはあかん
mergeだとコミットがいくつあろうとコンフリクト解消は一度だけ
したがって rebaseより mergeの方が楽
リベースの功罪
□よい点
 ・コミットグラフがきれいになる
  →マージ後のログがきれいにあるので、masterにマージする直前にするのはOkとすることがある
 ・githubなどのオープンソースプロジェクトにプルリクエストを送る場合は
  rebaseしてから送るのがマナー
□悪い点
 ・pushされたブランチをリベースすると push不可能になる
 ・マージしたという事実が失われる
 ・マージと比較すると、コンフリクト解消が面倒
 
------------------------------------