$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

gitを使ってみたまとめ(3)

前回はadd、commitの詳細や、変更点の確認、ファイル管理についてでした。今回はブランチの使い方についてです。


1.ブランチの作成
 新しくブランチを作成するには、次のコマンド。
$git branch (ブランチ名)
$git checkout -b (ブランチ名) (分岐させたいブランチ名)
$git branch (ブランチ名) (タグ名)
1番目は、現在のブランチから、(ブランチ名)の新しいブランチを作成する。2番目は(分岐させたいブランチ名)から(ブランチ名)を作成し、作成したブランチをそのままチェックアウトできる。3番目は作成したタグからブランチを作成する。

 現在作成されているブランチを表示するには

$git branch
と打ち込む。現在作成されているブランチ名が一覧で表示され、チェックアウトしているブランチにはアスタリスクがつく。

 チェックアウトは

$git checkout (ブランチ名)


2.ブランチ間での変更のマージ
 ブランチのマージには直接マージ、圧縮コミット、チェリーピックの3種類がある。直接マージはすべてのコミットをそのままマージする、圧縮コミットはコミットを一つにまとめてマージする、チェリーピックはいくつかのコミットを指定してマージすることだ。

 直接マージはマージさせたいブランチをチェックアウトさせた状態で、

$git merge (マージしたいブランチ名)
を実行することで、すべてのコミットがそのままマージされる。

 圧縮コミットは

$git merge --squash (マージしたいブランチ名)
$git commit -m "..."
を実行することで、行える。1番目のコマンドで、コミットを一つにまとめ、ステージに乗せる。2番目のコマンドで一つにまとめたものにメッセージをつけてコミットする。

 チェリーピックは、

$git cherry-pick (マージしたいコミット名、つまりハッシュ値)
$git cherry-pick -n (マージしたいコミット名)
で行える。1番目のコマンドは、指定したコミットをそのままマージする。2番目のコマンドは指定したコミットを一旦ステージに乗せる。こうすることで、いくつかのコミットをステージに乗せることができ、それを一つのコミットとしてマージできる。もちろんgit commitを行うことが必要だ。


3.競合への対処
 マージをしたときに競合を起こすことがある。例えば同じ行に対して変更を行ったときだ。マージするときにCONFLICTという表示がされる。この時、競合したファイルを編集すると、
<<<<<HEAD
test1

test2
>>>>>TEST

というような表示が出来ている。この部分が、競合したことを示す印だ。上の場合、HEAD(現在のブランチにおける最新のコミット)とTESTブランチのコミットが競合していて、前者ではtest1、後者ではtest2という書き込みが競合していることを示す。このような時はこの部分を人手で書き換えてやり、コミットを行えばよい。また競合を解消するためのツールもある。git mergetoolコマンドを使えば、それを起動することも出来る。


4.ブランチの削除
 ブランチの削除は以下のコマンド
$git branch -d (削除したいブランチ名)
これが成功するのは、現在チェックアウトしているブランチに削除したいブランチがきちんとマージされている場合に限る。強制的に削除するには-Dオプションをつければよい。


5.ブランチの名前変更
 名前変更は次のコマンド。
$git branch -m (変更前のブランチ名) (変更後のブランチ名)