Gitコマンドメモ3 (tag, diff)

gitにおけるタグ付け、diffコマンドによる差異の表示、マージ処理などに関するメモ

タグ操作

機能としては、CVSやSVNと大差なし。

  • タグ作成

タグのみとアノテーション付きと2種類ある。タグの場所(commit)を省略すると、HEADに作成される。ドット.やスラッシュ/も使えるが、タグ名の先頭と末尾に入れるとエラーになるので、使わないのが無難。

> git tag [tag_name] [commit] 
> git tag [tag_name] -m "annotation"
  • タグ削除
>  git tag -d [tag_name]
  • タグ一覧表示

タグのみとアノテーション付きと2種類ある。

> git tag
> git tag -n
  • タグ検索

ワイルドカード(*)が使える

> git tag -l "sample*"

Diff操作

機能としては、CVSやSVNと大差なし。
ワークツリーとインデックス(ステージ)の差分

$ git diff
diff --git a/sample.txt b/sample.txt
index a5bce3f..bae42c5 100644
--- a/sample.txt
+++ b/sample.txt
@@ -1 +1,2 @@
 test1
+test2
  • ワークツリーとコミットとの差分
> git diff [file]
> git diff HEAD
  • インデックス(ステージ)とコミットとの差分
> git diff --cached
  • 変更の差分を統計的に見る
> git diff --stat

マージ操作

これもCVS、SVNと変わらないが、Gitには直接圧縮チェリーピックの3つのモードがある。

  • 直接
    ブランチBをブランチAにマージする一般的なマージ。

git mergeコマンドの引数に指定したブランチを現在のHEADにマージする。作業ディレクトリでマージされるのではなく、リポジトリ上のツリーが直接マージされる。

なお、コンフリクトが発生すると、ワークツリーでのみマージされる。

> git checkout branchA
> git merge branchB
  • 圧縮
    ブランチBの履歴(N個のコミット)を1つのまとまった変更として、ブランチAにマージする。

    検証用ブランチで試行錯誤した結果、履歴は不要結果だけをマージしたいときに有効。マージしても試行錯誤した履歴はマージされるのではなく、マージ先との差分だけがステージング(インデックスツリーに)に登録される。

> git checkout branchA
> git merge --squash branchB
  • チェリーピック
    ブランチBの特定のコミット(複数選択可能)を、ブランチAにマージする。

コミットのIDを指定して個別にマージする。このマージ方法も、圧縮マージと同じく、ブランチそのものはマージされずに差分だけがステージングされる。

> git checkout branchA 
> git cherry-pick [commit id]

マージしたときの競合(コンフリクト)について

git merge実行後、マージが解決できないときブランチのマージは行われずに、ワークツリーに修正がマージされる。
この状態で、mergetoolを実行すると、インストールされたツールが起動する。

> git mergetool