Git 勉強会@万葉 #2 に行ってきた

5/8 に万葉さんで開催された Git 勉強会に参加してきました。
軽く遅刻しましたが、なんとか参加。


今回は全編 jugyo さんによるライブ git いじり。
前回は reset や stash の使い方など、実際に使う場面で困っている部分を掘り下げていく感じでした。
今回は、 1 人で使う場合の使い方を中心に、ブランチやリモートの概念とかを触ったりしてました。


というわけで、以下メモ晒し。
まとめていないし、ぱっと浮かんだコマンドも追記してしまっているので、
若干ずれてるかもしれませんが、ご容赦を。

Git について軽く

  • なぜ github を使うのか?
    • 個人でやるなら使わなくてもいいよね
    • サーバ用意しなくても手軽に共有できる

実際に Git を使ってみる

Windows の DOS プロンプトだと日本語が文字化けするらしい
tortoiseGit とかいけるんじゃね?

一人で使う
  • 初期化
$git init
  • 設定をする
$git config --global user.name hoge
$git config --global user.email hoge@example.com
$git config --global color.ui auto
  • 状態を確認する
$git st
  • コミットしたいファイルを追加する
$git add . #全ファイル
$git add -u #バージョン管理下にある全ファイル
  • コミットする
$git commit
$git commit -m'Comment' # コメント付き
$git commit --amend # 前回のコミットをやりなおす
  • ログを見る
$git log
$git log -p #差分も表示する。 -u でも可
$git log --stat #変更したファイルの概要
$git whatchanged
$git log --binary #バイナリファイルの差分を見る
  • コミットの内容を確認する

# HASH は 10 桁くらい指定すれば確実?

$git show HASH
$git show -p HASH # 差分も表示する
  • 差分を確認する
$git diff #現在の状態と、コミット予定の状態の差分
$git diff HEAD #現在の状態と、最新のコミットの差分
$git diff --cached #コミット予定の状態と、最新のコミットの差分
  • 取り消し
$git reset #git add したものを取り消す。インデックスのみ
$git reset --hard #全ファイルの変更を元に戻す
$git revert #変更を取り消すためのコミットを作成する
$git checkout HEAD FILENAME # FILE を最新のコミットの状態に戻す
  • バージョン管理しているファイルを見る
$git ls-files
ブランチを使う
  • ブランチを管理する
$git branch #ブランチの一覧
$git branch NAME #新規作成
$git branch -d NAME #削除
  • ブランチを切り替える

index に追加したファイルがある場合に切り替えると、切り替え先のブランチにパッチとして適用される。

$git checkout NAME
$git checkout -b NAME #新規作成&切り替え
  • 現在の index の状態を保存する
$git stash save 'message'
$git stash show 
$git stash list
$git stash apply 
$git stash clear
$git stash drop
$git stash pop
  • ブランチの変更を取り込む

コンフリクトしたら、変更して add して commit 。

$git merge BRANCH
$git merge --squash #最新のコミットだけをマージする
  • タグを付ける
$git tag NAME HEAD
リモートを活用する
  • ワーキングコピーを作成する
$git clone PATH
  • リモートを管理する
$git remote
$git remote add REMOTE PATH
$git remote rm REMOTE
$git remote show REMOTE
  • リモートの変更を取得する

pull だとマージされる。
fetch だと取得内容が FETCH_HEAD に格納される。
REMOTE, BRANCH は省略可能

$git pull REMOTE BRANCH
$git fetch REMOTE BRANCH
  • リモートに変更を反映する

REMOTE, BRANCH は省略可能

$git push REMOTE BRANCH
$git push REMOTE BRANCH:hoge # local の BRANCH を REMOTE の hoge に push する

リモートについて参照: http://at-aka.blogspot.com/2009/02/git-remote-repository-branch.html

Git の状態遷移

コピーしたファイルを変更して add すると index に登録される。
commit すると index に登録されたものがリポジトリに登録される。

Working copy => index (cache) => repo
            add            commit
             <=
	    reset

気軽に Git を使うには?

その他

  • hook が使えるらしい
    • 参照: .git/hooks/*.sample
  • 「何をバージョン管理するか?」をよく考えるべき
    • HEAD がわからなくなると破綻する
    • 親サーバはやっぱり必要?
  • remote のブランチがない場合
    • remote にブランチを作る
    • 既存のブランチに push する
  • 結局、ブランチとリモートがややこしい

次回予定?

  • みんなでコンフリクト大会
  • git と sinatra を使って、実際になにか開発する

やっぱり、実際に複数人で1レポジトリをがんがんいじくりまわしたらどうなるのか?が気になるところです。
その際に発生する問題と、その対処がわかるといいなーなんて思いました。


主催のjugyoさん、会場提供してくださった株式会社万葉さんありがとうございました!
参加した皆様もお疲れ様でした!