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不可能になる
・マージしたという事実が失われる
・マージと比較すると、コンフリクト解消が面倒

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