Upload
sanae-yamashita
View
563
Download
0
Embed Size (px)
Citation preview
Code for KOSEN 勉強会 #4
を使う準備をしよう
2015.11.08 @yamasy1549
git中級編
$ ブランチ
②push
③pull ⑤緑にした
⑥push
①赤にした ④pull ⑦青にした
こいつを
$ ブランチ
こうじゃ
$ ブランチ
ブランチ = 木の枝
たとえば新しい機能を追加したいとする。新しく書くコードにはバグがあるかも安全の保証されていないコードを本番環境にどんどん送るのはこわい今まさに動いてるサービスだったら…
$ ブランチ
本番環境とは別の時間軸をつくって作業
完全に分離されているので、その中であれば失敗しても OK
機能ごとにブランチをつくって完成したら幹に統合すればすっきり
幹 枝
なかったコトに…
$ ブランチ
慣習とか
・幹となるブランチの名前は「master」が多い
・ブランチをつくることを「切る」「生やす」という
・ブランチを master(本番のブランチ)に
統合することを「マージ」という
$ ブランチ
①ブランチ切る
②作業 ③マージする
④めでたく統合
$ ブランチ
①ブランチ切る
②作業\あれ、うまくいかない…/
\master じゃなくてよかった/
$ ブランチ
①ブランチ切る
②作業\やっぱ仕様変更!/
\え、ちょっっっ/
$ ブランチ
$ git branch
存在するブランチを一覧表示デフォルトでは master になってるよ!
$ ブランチ
$ git checkout -b ブランチ名
$ git branch
新しくブランチを作成してそこに移動再度確認すると、ブランチが増えているはず
$ ブランチ
$ git checkout 移動先のブランチ名
$ git branch -m 旧名 新名
「checkout」で他のブランチに移動できる名前の修正も可能
$ git での開発 flow 基本形
「git 管理よろしくね」init
編集
add
commit
push
作業リポジトリでコードを書く
commit 待ちエリアに登録
変更をまとめる
共有リポジトリに送る
$ git での開発 flow 復習
リポジトリ作る
ディレクトリを作る
「git 使います」宣言
基本形
最初のひと 2 番目以降のひと
もう作られてる
clone / pull する
もう使われてる
編集・add・commit・push
$ git での開発 flow 復習
A さん
B さん
今までの例
①赤にした
②push
③pull ④緑にした
⑤push
$ git での開発 flow 復習
A さん
B さん
①赤にした
②push
③pull ④緑にした
⑤push
push されるのを待たないと開発ができない?
$ git での開発 flow 復習
A さん
B さん
①赤にした
②push
③pull ④緑にした
⑤push
そんなことはない!
$ コンフリクト(競合)
A さん
B さん
②push
③pull ⑤緑にした
⑥push
①赤にした ④pull ⑦青にした
$ コンフリクト(競合)
A さん
B さん
②push
③pull ⑤緑にした
⑥push
①赤にした ④pull ⑦青にした
clone-push 間に他の人の変更があると…><
$ コンフリクト解消の流れ
pull
add
最新のファイルを手元に取り込む
競合したところがあれば修正
修正したファイルを add
rebase を続行する
修正
master(本番)ブランチに移動
開発ブランチに戻る
master の変更を開発ブランチに反映rebase
continue
$ コンフリクト解消の流れ①②
pull
add
rebase
continue
$ git pull origin master
一番最後に push した人は手元の変更履歴と共有リポジトリの変更履歴が一致する。それ以外の人は手元の変更履歴と共有リポジトリの変更履歴の差分をみてgit が自動的に差分を取り込んでくれる。
コーチとペアになってやってみよう!①はじめに 2 人とも最新のファイルを手元に取り込む
pull
add
rebase
continue
$ コンフリクト解消の流れ①②
$ git checkout -b ブランチ名
$ git branch
新しくブランチを作成してそこに移動今いるブランチ名の横に「*」マークがつく
pull
add
rebase
continue
$ コンフリクト解消の流れ①②
$ vim index.html
$ git add index.html
$ git commit -m “message”
タイトルを書き換えてみよう!(<title></title> で囲まれた中の文字)
pull
add
rebase
continue
$ コンフリクト解消の流れ①
$ git push origin ブランチ名
②まず 1 人目だけが push する
master
1 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ①
③Pull request を書いて 1 人目のブランチを master にマージする
Pull request・ぷるりく・このブランチではこんな変更を行いました!・これを(別の任意のブランチに)マージしてほしいから ちょっとコード見て確認してもらえますか?
などを書いて他の人にお知らせできる機能
pull
add
rebase
continue
$ コンフリクト解消の流れ①
③Pull request を書いて 1 人目のブランチを master にマージする
Pull req のタイトルと本文を記入して「Create pull request」で送信
・本文には、どういった変更を加えたのか書く・見た目を変更したなら、スクショとか貼れると good・開発中気になったことがあればそれも
pull
add
rebase
continue
$ コンフリクト解消の流れ①
③Pull request を書いて 1 人目のブランチを master にマージする
master
1 人目のブランチ
2 人目の人は、コードを見てよさそうなら「Merge pull request」を押してマージしてあげよう!
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git push origin ブランチ名
④次に 2 人目が push する
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
⑤Pull request を書いて 2 人目のブランチを master にマージする
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
2 人目のブランチには が含まれていないのでうまく master とマージできない…
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout master
ブランチを master に移動
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout master
$ git pull origin master
GitHub の master にある最新のファイルを手元の master ブランチに取り込む
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout ブランチ名
自分の作業ブランチに戻る
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git checkout ブランチ名
$ git rebase master
作業ブランチの変更を守りつつ、master ブランチの変更を取り込んでくれる
pull
add
rebase
continue
$ コンフリクト解消の流れ②
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
master
2 人目のブランチ
pull
add
rebase
continue
$ コンフリクト解消の流れ②
・・CONFLICT (content): Merge conflict in index.htmlWhen you have resolved this problem run "git rebase --continue".If you would prefer to skip this patch, instead run "git rebase --skip".To restore the original branch and stop rebasing run "git rebase --abort".
pull
add
rebase
continue
$ コンフリクト解消の流れ②
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<<<<<<< HEAD
<title> ごちうさ </title>
=======
<title> あいまいみー </title>
>>>>>>> commit タイトルをあいまいみーに変更
</head>
・
・ Git が、どっちを優先すればいいかわからなかった
pull
add
rebase
continue
$ コンフリクト解消の流れ②
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title> あいまいみー </title>
</head>
・
・
master 側(HEAD)と自分の変更点を比べて、必要ない部分を削除していく
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git add index.html
変更したファイルを add する(commit はしない!)
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git rebase --continue
rebase を続けるまだコンフリクトしてるとこがあれば出てくる
pull
add
rebase
continue
$ コンフリクト解消の流れ②
$ git push -f origin ブランチ名
再 push歴史を書き換えたので、強制 push(-f)
pull
add
rebase
continue
$ コンフリクト解消の流れ②
今度は「Merge pull request」が押せるはず!
master
2 人目のブランチ