opsだけどgitを使ってみた~その2

こんにちは。小宮です。 前回のつづきです。今回は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ポケットリファレンスの最初についてるチートシートが最高に分かりやすいと思いました。

では短いですがシリーズ完結ということで、読んでいただいてありがとうございました。