ページ

2012年12月17日

リファクタリングとかで作業ブランチを分けて作業して後でmasterにmergeするにはGitではどうやればいいかの説明 - branch, checkout, merge

7ヶ月前に、たった5つのコマンドで今すぐGitによるバージョン管理を始める方法なんて記事を書いた。この記事ではgit init, status, add, commit, logを紹介した。

今回はbranch, checkout, mergeを紹介しようと思う。利用シーンの想定としては、リファクタリングや新機能の開発などでブランチを分けて作業し、一通りうまくいったらmasterブランチにmergeするというイメージ。

バージョン

筆者のMacで使ってるGitは1.7.12.1で、最新安定版は1.8.0.2あたりだったはず。持ってない人はgit-scmからダウンロードしてインストールしてください。

はじめに


まずmasterブランチ(最初からあるブランチ)で適当なファイルを作成してコミットしておく。

branch

いわゆるブランチを一覧したり、新規作成したり、削除したりするためのコマンド。Subversionなどと違って、ブランチを切るたびに新しくディレクトリが作成されずに、同じディレクトリ内でGitが自動的に切り替えをしてくれる。

新しくtestingブランチを作成する。引数なしでgit branchとすればブランチの一覧が見れる。
現在選択中のブランチには*が付く。

checkout

ブランチを移動するコマンド。
-bオプションを付ければブランチの新規作成と移動が同時に行われる。

merge

ファイルの内容を変更してコミットする。
testingブランチに移動していたので、このコミットはmasterブランチではなくtestingブランチで行われた。masterブランチに戻ってソースを確認してみれば、変更が元に戻っていることが分かる。
masterブランチへtestingブランチをmergeさせる。
mergeによってファイルがtestingブランチの最新コミットに更新された。

git logしてみれば分かるように、masterのコミットにはマージコミットが作成されずにtestingのコミットがそのままつなげられる。これをfast forwardingといい、変更が競合(衝突、コンフリクト)しない限り、最新のコミットが適用される。

mergeのオプションを付ければ、必ずマージコミットを作成したり、コミットを一つにまとめてmergeしたりすることもできる。

おわりに

人に質問されてブランチやマージについて答えたので、そのついでにブログを書いてみようと思ったけど、やっぱり文章だけで説明するのは難しかった。もっと分かりやすい説明をしている記事やスライドがあるので、それを紹介して終わります。


Related Posts Plugin for WordPress, Blogger...