読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

git勉強内容まとめ7(ブランチについて)

ブランチとは,別々のバージョンを並行して開発するときに使える機能です。

git branchの基本的な使い方

$ git branch
* master

上のようにgit branchを入力すると,現在あるブランチの一覧を表示させることが出来ます。 実行結果から分かるように,masterというブランチが一番最初に作られていて自分が今そこにいることが確認できます。

複数のバージョンを管理するためには,新しくブランチを作成する必要があります。 masterとは別にhogeというブランチを作成するには,↓のように入力すれば大丈夫です。

$ git branch hoge

ブランチを移動するには$ git checkout ブランチ名のように入力します。 ブランチをhogeに移動した後に,hogeに移動してみると*の位置が変わっていることからブランチの移動が成功していることが確認できます。

$ git branch
* master
$ git branch
* master
$ git branch hoge
$ git branch
  hoge
* master
$ git checkout hoge
Switched to branch 'hoge'
$ git branch
* hoge
  master

このhogeの方で,ファイルの修正などを行っていっても,masterに戻るとmasterはhogeに移動する前の状態を保っています。


なお,下のようにcheckoutコマンドにbオプションをつけると,ブランチを作成しそのブランチに移動までをいっぺんにすることが出来ます。

$ git checkout -b hoge


ブランチのマージ

hogeの方で加えたファイルが,なかなか良かった場合masterの方でも反映させたいという場合があります。

これを行なうには,マージさせたい先のフォルダに移動した後,マージさせたい元のフォルダを↓のように指定します。

$ git merge hoge


ブランチの削除

上のように,「ブランチをマージすると,もうマージ元のhogeというブランチは必要無い!」という場合にはブランチの削除には↓に示すコマンドで可能です。

$ git branch -d hoge


マージの衝突(コンフリクト)

新しく作ったブランチでindex.htmlを編集,コミットした後に,さらにmasterに戻ってindex.htmlを編集,コミットしたとします。

この後に新しく作ったブランチとmasterをmergeしようとした場合,マージの衝突(コンフリクト)が発生します。

$ git merge hoge
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.


マージの衝突の解決

マージが衝突した場合git statusを入力すると,masterとhogeの両方でソースが書き換えられているからどうにかしてよ!みたいなメッセージが表示されます。

$ git merge hoge
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
$ git status
# On branch master
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      index.html
#


このような場合には,修正しなければなりません。 では,index.htmlをみてみましょう。

$ cat index.html
<<<<<<< HEAD
line 1st
=======
line first
>>>>>>> hoge

少し特殊な書き方で戸惑いますが,これは,"<<<<<"と">>>>>"で囲まれた部分がコンフリクトしていることを示しています。
HEAD(masterの直近のコミット)のところでは,line 1stであったのに,hogeのindex.htmlはline firstとなっている事が分かります。
そのためどちらかを選ぶか,正しい形に修正しなければなりません。


修正方法は,単純でvimなどのエディターを開いて正しい形に修正(<<<<<HEADの部分や,>>>>>hogeの部分もいらないので削除)するだけです。
修正した後は,いつものようにaddとcommitをすれば大丈夫です。

$ vim index.html
$ cat index.html
line 1st

$ git add .
$ git commit -m "conflict fixed"


今日勉強した内容は,ちょっとした機能を試したいという場合に新しくブランチを作成して気に入ったらmasterにマージさせるといった使い方がよいそうです。


参考ページ ドットインストールgit入門