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