何度でもやる git 教室

$git init

git init って何か?
ファイル名の末尾にに付けとかつけるのもバージョン管理の一種です

ls -lA .git

git は .git ディレクトリのなかにデータがあるみたいな感じになってる

.git のなかにあるものはなんなのか?
オブジェクトがある
自分自身が何者かという ID をもってる
あと親の ID をもってる
あとファイルの中身をもってる
ファイルの中身は圧縮されてる

touch foo
git add foo
git commit -m “add foo”
git log

commit 43df3466558a2fbd626957aab70f9db4f8fc3b45
Author: shikakun <*@***.jp>
Date:   Thu Oct 31 17:09:11 2013 +0900

    add foo

rm -r でディレクトリ消せる

コミットするとは何か?
git オブジェクトをつくるということ

SHA1
オブジェクトがないと履歴がたどれない

vim foo
foo とかかく
:wq
git add foo
git commit -m “foooo”
git log

commit 198a0eeaff4b58bf892c6ea26e24fcbc58f7fe7f
Author: shikakun <*@***.jp>
Date:   Thu Oct 31 17:17:29 2013 +0900

    add foo content

commit 43df3466558a2fbd626957aab70f9db4f8fc3b45
Author: shikakun <*@***.jp>
Date:   Thu Oct 31 17:09:11 2013 +0900

    add foo

新しくできたオブジェクトは親の情報をもってる
前に実行されたコミットの番号を覚えてる

git log
上から最新

git show 198a0eeaff4b58bf892c6ea26e24fcbc58f7fe7f
オブジェクトの中身を詳しく見ることができる

git には remote の概念がある
git remote -v

オブジェクトの数珠つなぎ
リポジトリといいます

push とは?
数珠つなぎの中身を remote にコピーすること

仕事のプロジェクトのやつを見てみよう
***l:~/dev//develop/*** (master)
$ git remote -v
origin git@***:/.git (fetch)
origin git@
:/***.git (push)

origin って名前は慣習的なもの

git remote -v
でどこにぶちこもうとしてるのか確認できる

ブランチ
git はブランチが強力

git branch で一覧

master って名前も慣習的なもの

git branch -a でリモートのブランチが一覧ででる!
便利

git checkout -b bar
でブランチ作成
git checkout master
で master ブランチへ移動

git log するとさっきブランチでコミットしたやつがない!

git log --graph

merge とは何か?
ブランチをがっしゃんこすること

コンフリクトとは
git が何を信じたらいいかわからなくなったこと
人間が直すしかない

HEAD とは先頭のこと

<<<<<<<< HEAD
先頭のこと

branch
ブランチの先頭のこと

  1 <<<<<<< HEAD
  2 foo-content (master)
  3 =======
  4 foo-content (!!! branch !!!)
  5 >>>>>>> branch

git fetch
pull ってかいたけど fetch のことです

fetch とは
人間が .git の中身がどうなってるかはわからないんだけど
fetch するととりあえず中身を .git にもってくることができる
自分の .git の HEAD の場所はかわってない!

git merge origin/master

で手元の .git の中身につながって HEAD の場所がかわる!

git rebease
リモートのオブジェクトの変更を時系列に並べられる!!

git pull —-rebase
git pull と rebase を同時にできる!!