いよいよGitのやばさの続きですね。
前回の「Gitがやばい(1/3)」では基本コマンド、status, commit, addなど、そして便利なgitignoreの書き方などの最低限の知識を説明しました。
今回はよくある状況 1) 一回リリースしてからも開発が続く状況 2)他の人と一緒に開発を行ってる設定
には必ず必要となる、Gitのブランチ・マージなどの本格的なバージョニング部分に触れたいと思います。
では、始めましょう。
Level 2: branch, merge, fetch, pull,
「Gitがやばい(1/3)」で作ったプロジェクトをこちらにも使うと思います。
Branch
まずはbranchを作りましょう
git branch new-branch
“new-branch”の代わりに好きな名前を書くと、新しいブランチがその名前で作成されます。このやり方で、新しいブランチが現在のブランチと同じコミット履歴・ローカルのファイルの状況などになります。
git branch
(パラメータなし)
で現在、ローカルで置かれてるブランチが見れます。
*が付いてるのが現在checkoutされてるブランチ。
git checkout new-branch
で新しく作成したブランチに移動しましょう。
ちなみに、新しいブランチを作成して、それをcheckoutするための短い書き方もあって、それはgit checkout -b new-branch
です。-b
のフラグを入れることによって、checkoutが新しいブランチを作成してからcheckoutすることになります。
git log
を打ちますと、このような出力が見られます。
Masterとnew-branchのコミット履歴があります。現在は一緒です。 もう一つのコミットを作成しましょう
$cat > file.txt some_text $git add . $git commit -m "another commit" $git log
追加のコミットがnew-branchの履歴だけにあって、masterがまだRevert "最初のファイル作成、と.gitIgnore"のコミットに残ってますね。
図をかくやり方もありまして
o-o <- master \ o <- new-branch
merge
これで終わりでしたら、merge
ができます。それも、やり方が二つあって、一つはローカルでマージすること、もう一つはオンライン(remote)でマージする方法。ローカルの場合には、masterをcheckoutし、git merge new-branch
でうまく行きます(conflictがない場合)
自分ならほとんどオンラインでマージしますので、そのやり方を説明します。
まずはnew-branchをpushしましょう。やり方覚えていますか?
git push -u origin new-branch
そして、オンラインのリポジトリを確認しますと…
(ちなみに、このリポはhttps://github.com/vortexkd/git-tutorial で見れます)
ここでプルリクを出して、次の画面でマージしましょう。
(緑のボタンを押したら...)
さて、これで、ローカル環境にない編集をremoteで行いました。
それはどうやってローカル環境に持ってくるのでしょうか?
fetch
まずは、ローカルでmasterをチェックアウトをし、statusを確認しましょう
ここではremoteのマージが見えない?!あれれ、?
はい、それはremoteの情報はまだremoteにしかなくて、ローカルにそれをみるために’fetch’を行いましょう git fetch
もう一回確認しますと、ちゃんとありますね。うえに”Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.”と書いてあるのがその通知です。
ローカルでpull, merge,などの処理を行いたい場合にはまずfetchを実装した方がいいでしょう。「知らない間にremoteが更新されてるかもしれません。(共同開発の場合)
pull
では、remoteの編集をローカルに持って行きましょう
git pull
!
すみません、間違いました。
こちらです。
お疲れ様です! これで、gitのbranch, merge, fetchとpullも使えるようになりましたね!