git まとめ　※自分用メモ

参考サイト(ドットインストール)
http://dotinstall.com/lessons/basic_git

Gitコマンド一覧 Git
http://qiita.com/fukumone/items/73e1a9a62c5e4454263b
http://naokirin.hatenablog.com/entry/20111202/1322576420
http://qiita.com/2m1tsu3/items/6d49374230afab251337

Gitでやらかした時に使える19個の奥義
http://qiita.com/muran001/items/dea2bbbaea1260098051

Git 初期設定
http://qiita.com/dawn_628/items/52951926b9149b0f7e54

GitHub-flow
http://b.pyar.bz/blog/2014/01/22/github-flow/

Pro Git
https://git-scm.com/book/ja/v2

# 主要コマンド
git diff
git add .
git status
git commit -m "hogehoge"
git status

git show # 最新のコミット内容を表示
git show commit_id(タグ名) # コミット内容を表示

git diff # インデックスとワーキングツリーの差異を表示
git diff HEAD~3 # HEADから3つ前のコミットと現在のワーキングツリーとの差分を見る
git diff [commit id 1] [commit id 2] # コミット間の差異を表示する.

1. 作業ディレクトリ  # git add 1 番（作業ディレクトリ）から 2 番（ステージングエリア）に上げる 例) 「git add index.html」
2. ステージングエリア(インデックス) # git commit 2 番（ステージングエリア）から 3 番（リポジトリ）に上げる
3. リポジトリ

ファイルを作ったり修正したりするのは、基本的には作業ディレクトリで行います。
そこで、1 つのファイルを作って、2 つめのファイルを作って 3 つめのファイルを作って…、ある程度の機能ができたとら、リポジトリに保存したいのですが、その途中途中で作業経過をステージングエリアに保存しておくことができます。
これがあることで、意味のあるまとまりをリポジトリの方に綺麗に保存していくことができるという利点があるのですが、最初のうちはこういったところを経由するんだよというくらいに思っておいていただければと思います。
なお、リポジトリには「ローカルリポジトリ」と「リモートリポジトリ」というものがあります。
基本的には、1 人でやっていくときにはローカルリポジトリ（データベース）にぽんぽんと保存していって、必要だったら元に戻ったりだとか、別のバージョンを管理したりすることができます。
リモートリポジトリは Web やネットワーク上に作って、ほかの人とソースコードを共有しながらサービスを作っていくときにすごく便利なのですが、初心者の域を超えると思いますので、今回はローカルの方で git を使ってバージョン管理しながら開発を進めていく、という流れを見ていきたいと思います。

git config -l # gitの設定の一覧を表示

git config --help # マニュアルが出てきます

git init # 、「この myweb というディレクトリを git で使うよ」と宣言するためのもの

git log # 履歴を見たりすることができる

git log --online #  ID の上何桁とメッセージだけが表示される

履歴だけではなくて、変更された場所を具体的に見たい場合には「git log -p」とすると、このようにコミットの情報に加えて、どこがどう変更されたかを見ることができます。 # それから履歴だけではなくて、変更された場所を具体的に見たい場合には、「git log -p」とすると、このようにコミットの情報に加えて、どこがどう変更されたかを見ることができます。

7. 「git log --stat」とすると、今度はどこが変更されたかではなくて、どのファイルが何箇所変わったかというのを見ることができます。


8. git status # 今どういう状況かを確認
9. 前に説明しましたが、git は基本的にこの 3 つの状態でファイルを管理していくので、長く作業しているとどのファイルをどこに置いたかを忘れてしまうこともあります。
そうしたときに今どういう状況かを確認するときに使えるのが、このコマンドになります。

「modified」というのは変更されたという意味
「Changes not staged for commit」は「ステージングにも来ていないし、コミットにも来ていない」という意味なのですが、ここで add するか、それとも間違えていたらこのコマンドで元に戻せるよ、ということを教えてくれます。

10. git diff # どこが編集されたのか分かる
11. git diff --cached # git add . の後の場合(ステージングエリアに上げた後の場合)

ただ「git diff」は、今さっき変更してまだステージングエリアに上げていないものに関しては使えるのですが、一旦ステージングエリアに上げるとちょっと違った書き方になりますので、それも併せて見ておきましょう。そうすると、ステージングエリアに上がっているけどコミットされていないファイルの「どこがどう次のコミットで変更されるか」が分かります。

12. git add . # 今のディレクトリより下にあるファイルを全部 add しなさい、という意味

13. git rm index.html
14. git mv index.html
一旦ステージングエリアに上げたり、コミットした後にファイルを消す場合に、普通の Linux コマンドの「rm」とか「mv」を使うと、git の方では「さっきまで管理していたファイルは一体全体どこに行ってしまったんだ？」となってしまいます。
（したがって）一旦 git の管理下に置かれたファイルは、必ず「git rm …」といった形で削除したり、もしくは「git mv …」といった形で移動させたるようにしましょう。
ここでは具体例を上げませんが、移動とか削除するときには git のコマンドを使うんだよ、ということを覚えておいていただけると、何かとトラブルがないかと思います。

15. 直前のコミットを変更する
よくあるのが直前のコミットでちょっとした間違いをしてしまって、それで新しいコミットを作るほどでもないというときに使えるコマンド
git add .
git commit -m "hogehoge"
　　↓
ファイル修正後、再度、
git log
git add .
git commit --amend # amendは変更するという意味
git log

そうすると、コミットメッセージを変更するかどうか聞かれるので、大した変更ではなかったのでそのままで行こうということでこのまま保存すると直前のコミットを変更してくれます。
ログを見ると、無駄にコミットが増えているわけではなくて、ちゃんと 2 つになったまま、しかも変更点は反映されています。

過去のバージョンに戻ってみよう (1)　自在に戻ることができる！！
ファイルの編集が気に入らないなくて、過去のバージョンに戻したいとき
git add .
   or
git add .
git commit -m "first_push"
   ↓
git log
git reset --hard HEAD # 1つ前に戻る
git reset --hard HEAD^(ハット、キャレット) # 2つ前に戻る
git reset --hard commit_id(12345678) # 指定のバージョンに戻る
git log

git resetしたあとにそれを取り消す方法、コミットIDを使って以前のバージョンに戻る方法について学びます。
「reset」とか、ほかの変更を加えるような命令のうちのいくつかもそうなのですが、実は
「ORIG_HEAD」というものに前回取り消された HEAD の情報が 1 個だけ入っています。
それを使うと実はこのように元に戻ることができるので、「reset」すると何かなくなってしまうのでは？と思う人もいるかと思うのですが、基本的にコミットに関してはすべて保存されていて何らかのやり方で戻すことができる。
コミットに関してはファイルとして保存されているものなので、履歴が残っていると思ってください。

git reset --hard ORIG_HEAD(オリジナルヘッド) # git resetしたあとにそれを取り消すことができる

#15 マージの衝突を解決してみよう、22 共有時のトラブルを解決する　コンフリクト(衝突)解消
http://dotinstall.com/lessons/basic_git/6715
http://dotinstall.com/lessons/basic_git/6716
http://dotinstall.com/lessons/basic_git/6722

#17 タグを使ってみよう
タグ機能(「コミット ID」 に対して分かりやすい名前を付けられる機能)
タグというのは、「git log」したときに見られるわかりにくい「コミット ID」 に対して分かりやすい名前を付けられる機能

git add .
git commit -m "hogehoge"
git log
git tag 任意のタグ名 # 直近のコミットに対してタグをつける
git tag (任意のタグ名) (commit id) # 後から、直近以外のコミットにタグを付けたい場合
git tag -d (任意のタグ名) # タグを削除
git tag # タグの一覧を表示
git show commit_id(タグでもOK) # タグを指定してコミット内容を表示
git reset commit_id(タグでもOK) # resetもタグ名でできる

(そのタグが）いろいろなところで使えるので、例えば「git show」はコミットの内容を示すコマンドですが、ここでわざわざこういう変な ID を指定しなくても、「1.0 の内容なんだったっけ？」というときには「git show v1.0」のように分かりやすい名前で指定することができます。ほかにも「git reset」などで昔のバージョンに戻りたいときにもこの別名が使える。

#18 エイリアスを使ってみよう
git config --global alias.co checkout # git checkout の checkoutをcoに変更
git config --global alias.st status # 上記と同じ
git config -l # エイリアス一覧を確認

#19 はじめての共同作業(共有リポジトリを設定)
git init --bare

#20 共有リポジトリにpushしてみよう
git remote add origin リポジトリの住所(GitHubのSSHなど) # リポジトリの送り先を登録
git remote rm origin リポジトリの住所(GitHubのSSHなど) # リポジトリの送り先を削除
git config -l

git push origin master

#21 リポジトリの内容を共有してみよう