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
仮想的なファイルを手元に持ってくる。