万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Tech Guild - Head First Git

URL: http://devlove.doorkeeper.jp/events/5241

サブバージョンは

ローカルリポジトリに反映してから
二段構え

アップデート
mergeまたはrebase 


fetchとmergeが別

mergeまたはrebase 

git
ゴミのコミットはどんどんやっていい
subversionはダメ

fetch -> merge or rebase

マージさえきちんとしたらpushがきちんとできる

汎用的にできる
git知ってる人が即戦しないと破綻する

・統合マネージャ型
メインのマネージャが他の人のを含んでpushを行う。
pull request

独裁者と若頭型
※Pro Git

若頭がとりこんで、さらに独裁者がメインリポジトリにマージ
Linuxはこうやってる。

GitHub Flow と git-flow

◯内部構造
大事なのは3つ
1. ワークツリー

2. ステージング・エリア(インデックス)

3. Gitリポジトリ


◯ローカル環境
ローカルリポジトリ、ローカルフォルダ


1. .git (Gitリポジトリ)
2. ワークツリー (作業ディレクトリ) ただのディレクトリ
3. index・・ステージングエリア

Untracked files:
まだ何もしてない状態

これからコミットの対象
→ ステージングエリア addすると移動する

.git/に入っていく
=ステージされたという

git statusのメッセージ

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   test1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

まだaddしてないよ

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   test1.txt
#

まだコミットしてないよ

git log --graph --color


ファイルを新しく追加するときも
ファイルを修正するときも
git add


git rm しないといけない
普通にrmしてしまうと結局 git rm しないといけない。


間違って消してしまった場合

git reset HEAD <file>

※Addしたことも戻せる


修正したファイルが戻される

git checkout -- dir1/file3


untracked (未追跡)

HEADの1つ前のcommitの状態に戻る

git reset -- hard HEAD^

HEAD^ ・・・HEADと1つ前
HEAD^1

HEAD・・・タグ付けされた状態

git reflog
コミットしたものは残ってる

git branch
Subversion trank

すべてがmasterのブランチ

rebaseだとmergeの結果がなくなるので。
rebaseだけにしよう、mergeだけにしよう、はプロジェクト次第

github pullrequestを良くする

git branch
今いじってるブランチ

git branch develop
→ developブランチを作っただけ

git checkout develop
→ 切り替える


HEADがどこにいるかが大事

git merge <他のブランチ> 


スタッシュ
まだコミットしてないのを見えないようにする。

clone
過去のコミットも全部見られる


masterをそのまま持ってくる
masterがそのままきて、origin/master(リモートリポジトリ/マスター名)

fetchはあまりしない


・リモートも終える

git branch -a
git fetch origin master

自分のリモートだけが反映される

git pull origin master --rebase
git fetch

仮想的なファイルを手元に持ってくる。