43
Code for KOSEN 勉強会 #4 を使う準備をしよう 2015.11.08 @yamasy1549 git 中級編

gitを使う準備をしよう - 中級編

Embed Size (px)

Citation preview

Page 1: gitを使う準備をしよう - 中級編

Code for KOSEN 勉強会 #4

を使う準備をしよう

2015.11.08 @yamasy1549

git中級編

Page 2: gitを使う準備をしよう - 中級編

$ ブランチ

②push

③pull ⑤緑にした

⑥push

①赤にした ④pull ⑦青にした

こいつを

Page 3: gitを使う準備をしよう - 中級編

$ ブランチ

こうじゃ

Page 4: gitを使う準備をしよう - 中級編

$ ブランチ

ブランチ = 木の枝

たとえば新しい機能を追加したいとする。新しく書くコードにはバグがあるかも安全の保証されていないコードを本番環境にどんどん送るのはこわい今まさに動いてるサービスだったら…

Page 5: gitを使う準備をしよう - 中級編

$ ブランチ

本番環境とは別の時間軸をつくって作業

完全に分離されているので、その中であれば失敗しても OK

機能ごとにブランチをつくって完成したら幹に統合すればすっきり

幹 枝

なかったコトに…

Page 6: gitを使う準備をしよう - 中級編

$ ブランチ

慣習とか

・幹となるブランチの名前は「master」が多い

・ブランチをつくることを「切る」「生やす」という

・ブランチを master(本番のブランチ)に

 統合することを「マージ」という

Page 7: gitを使う準備をしよう - 中級編

$ ブランチ

①ブランチ切る

②作業 ③マージする

④めでたく統合

Page 8: gitを使う準備をしよう - 中級編

$ ブランチ

①ブランチ切る

②作業\あれ、うまくいかない…/

\master じゃなくてよかった/

Page 9: gitを使う準備をしよう - 中級編

$ ブランチ

①ブランチ切る

②作業\やっぱ仕様変更!/

\え、ちょっっっ/

Page 10: gitを使う準備をしよう - 中級編

$ ブランチ

$ git branch

存在するブランチを一覧表示デフォルトでは master になってるよ!

Page 11: gitを使う準備をしよう - 中級編

$ ブランチ

$ git checkout -b ブランチ名

$ git branch

新しくブランチを作成してそこに移動再度確認すると、ブランチが増えているはず

Page 12: gitを使う準備をしよう - 中級編

$ ブランチ

$ git checkout 移動先のブランチ名

$ git branch -m 旧名 新名

「checkout」で他のブランチに移動できる名前の修正も可能

Page 13: gitを使う準備をしよう - 中級編

$ git での開発 flow 基本形

「git 管理よろしくね」init

編集

add

commit

push

作業リポジトリでコードを書く

commit 待ちエリアに登録

変更をまとめる

共有リポジトリに送る

Page 14: gitを使う準備をしよう - 中級編

$ git での開発 flow 復習

リポジトリ作る

ディレクトリを作る

「git 使います」宣言

基本形

最初のひと 2 番目以降のひと

もう作られてる

clone / pull する

もう使われてる

編集・add・commit・push

Page 15: gitを使う準備をしよう - 中級編

$ git での開発 flow 復習

A さん

B さん

今までの例

①赤にした

②push

③pull ④緑にした

⑤push

Page 16: gitを使う準備をしよう - 中級編

$ git での開発 flow 復習

A さん

B さん

①赤にした

②push

③pull ④緑にした

⑤push

push されるのを待たないと開発ができない?

Page 17: gitを使う準備をしよう - 中級編

$ git での開発 flow 復習

A さん

B さん

①赤にした

②push

③pull ④緑にした

⑤push

そんなことはない!

Page 18: gitを使う準備をしよう - 中級編

$ コンフリクト(競合)

A さん

B さん

②push

③pull ⑤緑にした

⑥push

①赤にした ④pull ⑦青にした

Page 19: gitを使う準備をしよう - 中級編

$ コンフリクト(競合)

A さん

B さん

②push

③pull ⑤緑にした

⑥push

①赤にした ④pull ⑦青にした

clone-push 間に他の人の変更があると…><

Page 20: gitを使う準備をしよう - 中級編

$ コンフリクト解消の流れ

pull

add

最新のファイルを手元に取り込む

競合したところがあれば修正

修正したファイルを add

rebase を続行する

修正

master(本番)ブランチに移動

開発ブランチに戻る

master の変更を開発ブランチに反映rebase

continue

Page 21: gitを使う準備をしよう - 中級編

$ コンフリクト解消の流れ①②

pull

add

rebase

continue

$ git pull origin master

一番最後に push した人は手元の変更履歴と共有リポジトリの変更履歴が一致する。それ以外の人は手元の変更履歴と共有リポジトリの変更履歴の差分をみてgit が自動的に差分を取り込んでくれる。

コーチとペアになってやってみよう!①はじめに 2 人とも最新のファイルを手元に取り込む

Page 22: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ①②

$ git checkout -b ブランチ名

$ git branch

新しくブランチを作成してそこに移動今いるブランチ名の横に「*」マークがつく

Page 23: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ①②

$ vim index.html

$ git add index.html

$ git commit -m “message”

タイトルを書き換えてみよう!(<title></title> で囲まれた中の文字)

Page 24: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ①

$ git push origin ブランチ名

②まず 1 人目だけが push する

master

1 人目のブランチ

Page 25: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ①

③Pull request を書いて 1 人目のブランチを master にマージする

Pull request・ぷるりく・このブランチではこんな変更を行いました!・これを(別の任意のブランチに)マージしてほしいから ちょっとコード見て確認してもらえますか?

などを書いて他の人にお知らせできる機能

Page 26: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ①

③Pull request を書いて 1 人目のブランチを master にマージする

Pull req のタイトルと本文を記入して「Create pull request」で送信

・本文には、どういった変更を加えたのか書く・見た目を変更したなら、スクショとか貼れると good・開発中気になったことがあればそれも

Page 27: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ①

③Pull request を書いて 1 人目のブランチを master にマージする

master

1 人目のブランチ

2 人目の人は、コードを見てよさそうなら「Merge pull request」を押してマージしてあげよう!

Page 28: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git push origin ブランチ名

④次に 2 人目が push する

master

2 人目のブランチ

Page 29: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

⑤Pull request を書いて 2 人目のブランチを master にマージする

master

2 人目のブランチ

Page 30: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

2 人目のブランチには   が含まれていないのでうまく master とマージできない…

master

2 人目のブランチ

Page 31: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git checkout master

ブランチを master に移動

Page 32: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git checkout master

$ git pull origin master

GitHub の master にある最新のファイルを手元の master ブランチに取り込む

Page 33: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git checkout ブランチ名

自分の作業ブランチに戻る

Page 34: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git checkout ブランチ名

$ git rebase master

作業ブランチの変更を守りつつ、master ブランチの変更を取り込んでくれる

Page 35: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

master

2 人目のブランチ

Page 36: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

master

2 人目のブランチ

Page 37: gitを使う準備をしよう - 中級編

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".

Page 38: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

<!DOCTYPE html>

<html lang="ja">

<head>

<meta charset="UTF-8">

<<<<<<< HEAD

<title> ごちうさ </title>

=======

<title> あいまいみー </title>

>>>>>>> commit タイトルをあいまいみーに変更

</head>

・ Git が、どっちを優先すればいいかわからなかった

Page 39: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

<!DOCTYPE html>

<html lang="ja">

<head>

<meta charset="UTF-8">

<title> あいまいみー </title>

</head>

master 側(HEAD)と自分の変更点を比べて、必要ない部分を削除していく

Page 40: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git add index.html

変更したファイルを add する(commit はしない!)

Page 41: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git rebase --continue

rebase を続けるまだコンフリクトしてるとこがあれば出てくる

Page 42: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

$ git push -f origin ブランチ名

再 push歴史を書き換えたので、強制 push(-f)

Page 43: gitを使う準備をしよう - 中級編

pull

add

rebase

continue

$ コンフリクト解消の流れ②

今度は「Merge pull request」が押せるはず!

master

2 人目のブランチ