gitのローカル
リポジトリで
ドワンゴモバイル @kbigwheel
masterやdevelopは使うな!
予想以上につまらなかったので
急きょやめて別のネタをします
今日は僕が個人的に実践してる
gitの使い方の話
予め予防線を張っておくと、
僕はgitマスターには程遠いので
完全に間違ったことを
言ってる可能性があります
今日のスライドは頭から鵜呑みにせず、
この方針を採用する場合は
自分自身でよく考えてから実践してください
この方針を採用する場合は
自分自身でよく考えてから実践してください
本題入ります
$ git branch
master
develop
features/sugoi-kino
↑よくlocalリポジトリにあるこれ、
masterブランチとdevelopブランチ。
masterブランチとdevelopブランチ。
これを、窓から投げ捨てよう
$ git branch -d master
$ git branch -d develop
$ git branch
features/sugoi-kino
Why?
rebase作業で混乱しやすいため
例1. features/sugoi-kinoブランチをoriginリモートリポジトリのdevelopブランチに対してrebaseしたい
$ git checkout features/sugoi-kino
$ git fetch origin
$ git rebase develop
originリモートリポジトリのdevelopブランチ(origin/develop)と
ローカルリポジトリのdevelopブランチを同期しないから
(新人のNさん(仮名)は新人の頃これで一度
投入事故を起こしたことがあります)
これは間違っている
$ git checkout features/sugoi-kino
$ git fetch origin
$ git rebase develop
ではどうするのが正しいか
$ git checkout develop
$ git pull origin develop # このコマンドでorigin/developとdevelopを同期する
$ git checkout features/sugoi-kino
$ git rebase develop
これなら最新状態になったローカルリポジトリのdevelop
ブランチに対してrebaseできる
ブランチに対してrebaseできる
でもちょっと待て
なんでoriginリモートブランチのdevelopブランチを対象に
rebaseしたいのにわざわざローカルのdevelopブランチを
中継する必要があるんだ?
rebaseしたいのにわざわざローカルのdevelopブランチを
中継する必要があるんだ?
リモートブランチを直接指定してrebaseする方法が
あるんじゃないの?
あるんじゃないの?
→あります
実はブランチを指定する場所では
リモートリポジトリ名/ブランチ名
と書くことでリモート上のブランチを直接指定できる
リモートリポジトリ名/ブランチ名
と書くことでリモート上のブランチを直接指定できる
$ git fetch origin
$ git rebase origin/develop
こんな感じ
mergeでも同様にリモートリポジトリ上のブランチを指定できる
これができるとローカルリポジトリにあるブランチは
変更を直接加えるブランチのみになる
しかしgithubを使ってるためmaster,developへの変更は
現状pull requestがすべて
↓
ローカルリポジトリのmaster, developブランチ(゚⊿゚)イラネ
特にほかのVCSからgitへ移ってきた人は
ローカルのブランチとリモートのブランチが
混同されがち(あるいは自動で同期されると勘違いしがち)
なので、
ローカルのmaster,developブランチは削除して
origin/* 構文を覚えましょう!
gitに慣れてる人でもローカルのブランチが
すべて進行中のブランチのみになるという嬉しい点があります
蛇足1 detached head
$ git checkout origin/master
ちょっとmasterでテストしたい場合なんかに便利
ただしこれを行うとdetached head状態になる
(自分がどのブランチにいるかわからない状態)
ただgitがワカンネーよって言ってるだけでcheckoutした
自分自身はわかってるはず。問題ないので恐れるな!
(自分がどのブランチにいるかわからない状態)
ただgitがワカンネーよって言ってるだけでcheckoutした
自分自身はわかってるはず。問題ないので恐れるな!
蛇足2 なんでgit fetchはブランチを同期しないの?
git fetchコマンドは一見originリポジトリのdevelopと
ローカルリポジトリのdevelopを同期してくれそうに見えるが、
実際にはoriginリポジトリのdevelopとローカルリポジトリのorigin/developを同期する
逆に言うとgit fetchしない限りローカルリポジトリのorigin/developは同期されない
(origin/developを指定するたびoriginを見に行って
最新状態を取得したりしない)
よって
$ git fetch origin
$ git rebase origin/develop
のfetchを忘れて
$ git rebase origin/develop
だけ実行してしまうと最後にfetchした時のorigin/developへrebaseしてしまう→ 投入事故につながる!
注意しましょう
スライド
こっからは質問・ツッコミ待ち
gitのローカルリポジトリでmasterやdevelopは使うな!
By kbigwheel
gitのローカルリポジトリでmasterやdevelopは使うな!
- 4,447