こんにちは。小宮です。 前回のつづきです。今回はgitマージとタグとコンフリクトの話を書きます。 まあ初心者が慣れてきた頃の様子ということで生温かく見守ってください。 git-flowやブランチモデルがどうという話はでてきません。
git branch でブランチを切る
現在居る場所を確認する
$ git branch -a
add_custom_repository
* master
addしただけのやつがないのを確認します。
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: .gitignore
#
no changes added to commit (use "git add" and/or "git commit -a")
※万が一addしただけのやつがある場合、commitするかstashするかする必要があります。
ブランチを新しく切って移動
$ git checkout -b add_xxxx-options
$ git branch -a
あたらしい場所に*がついてるのを確認 git-checkout(1) ブランチを作成するのではなく移動するだけの場合(-bつけない)
$ git checkout <branch-name>
$ git branch -a
修正する
$ git add <filename>
$ git commit -m 'comment'
pushするときは、
$ git push origin <branch-name1>:<branch-name1>
このようにすると以下のように.git/configが登録されて以降は引数書かなくてもよくなります
[branch "<branch-name1>"]
remote = origin
merge = refs/heads/<branch-name1>
ただし、引数つけないと全部のローカルbranchがpushされるのでpushできる状態でない場合は注意が必要です
修正ができたらknife solo でドライランで確認するなどを実施します
masterにマージする操作について
Git - ブランチとマージの基本 gitlabのGUI上でマージリクエストを作ることができます(githubだとプルリクと呼ぶやつです) [Merge Requests]リンクを選んで、[+New Merge Request]をクリックしてどこのブランチからどこのブランチにマージするのか決定して作る。 問題なさそうならそのマージリクエストを許可します。
もしくは、git margeとかでもいい。 master(marge先のブランチ)に移動してgit marge <margeしたいブランチ名>してcommitするだけ。 不安なら新しく検証用のブランチを切ってためしにそこにmargeしてみてもよいです。
コンフリクトが起きた場合は上記URLをよく見たり検索するなりして対応します。
tagについて
tagとはコミットに付けるラベルのようなもの。 特定のコミットに特定のタグをつけてバージョン管理するような用途にななります。
ふつうはコミットした直後にタグを付けます
$ git tag
とだけうつとtagの一覧が取得できる。
$ git tag <tag-name>
と打つと現在のHEADにタグを新しくつけることができる。
そのままだとローカルでしか意味を持たないtagになるので、 リモートのoriginにタグをpushするには以下のようにします
$ git push origin <tag-name>
タグの内容を閲覧する場合は、checkoutすればいいです
$ git checkout <tag-name>
ただしこうすることで分離HEAD状態になるためこの状態で更新をしてもどこにもcommitすることができないです。 この更新を残したい場合-bをつけて新しくブランチを切ってそこにcommitするという方法があります。 タグは単なるポインタでしかなく更新はできないのでどこかのブランチにcheckoutで戻ってから更新するのがよいです。
confrictを事前に特定する方法について
git format-patchという便利なものがあります。ポインタで済みませんが詳しくはリンク先をご覧ください。 git mergeでコンフリクトが発生するか前もって調べる方法 - Qiita これをみて、同じようにコンフリクトしてる箇所を特定して、その場所をブランチ間で同じに合わせたところ マージボタンがブラウザに出るようになりました。これをポチっとするのがラクかなと思う次第です。 不安だったらgit diff master <file-name>
とかで確認したりgit checkout <branch-name> <file-name>
などで別のブランチに特定のファイルだけ合わせてコミットしとくのもいい気がします。
現在のヒストリランキング
おまけです。作業環境によって用途が異なるのでランキングもちがう感じになってます。
@某社内鯖
# history | awk '{print $4}' | sort | uniq -c | sort -nr | head
1598 git
768 vi
382 cat
341 ls
249 cd
222 bundle
189 aws
139 knife
116 ./ruby
83 for
@某リモート鯖
$ history | awk '{print $2}' | sort | uniq -c | sort -nr | head
185 kitchen
183 vi
119 git
56 ssh
47 cd
38 w
34 ls
29 df
24 for
22 cat
他になにかあったときは以下を参考にしたいと思っています。 Gitでやらかした時に使える19個の奥義 - Qiita gitのpush.defaultに関するノウハウ - Qiita それといまさらですが、Gitポケットリファレンスの最初についてるチートシートが最高に分かりやすいと思いました。
では短いですがシリーズ完結ということで、読んでいただいてありがとうございました。