第43回 覚えておきたいGitのコマンド
覚えておきたいGitのコマンド
自分がやりたいことができるコマンドを必死に探したので、ここに示す。
前提
今回の記事の前提を、以下のようにします
「1人でローカルな環境でのみ使う。ブランチは切らない」
コマンドを試す前の下準備
コマンドを試す前に、gitで管理するプロジェクトを作ろう。
$ mkdir training $ cd training/
リポジトリの作成と1stコミット
trainingというディレクトリを作って移動したところで、
リポジトリを作ろう。 a.txt n.txt という2つのファイルを作って、コミットまでやります。
$ git init $ vi a.txt $ vi n.txt
それぞれの内容は以下の通り、
$ cat a.txt AAAAA $ cat n.txt 11111
単に、AAAAAと11111という1行が書かれただけのファイルです。
コミットします。
$ git add a.txt $ git add n.txt $ git commit -m "1st commit"
ファイルに変更を行なって2ndコミット
次に2回目のコミットを行なうために、a.txtを書き換えコミットします。
$ vi a.txt $ git add a.txt $ git commit -m "2nd commit"
あっと、a.txtの内容は BBBBB と Aが5つだったところをBを5つに変えました。
さらにファイルに変更を行って3rdコミット
今度はn.txtの内容を変えて、
$ vi n.txt $ git add n.txt $ git commit -m "3rd commit"
あっと b.txtの内容は 2222222222 と 1が5だったところを2を10個に変えました。
git log でログの表示
ここでgit logでログを表示してみましょう。
$ git log commit efe1f74d0c211bf854d8e08257f5a3d24a949c3c Author: bi_na <email address> Date: Mon Sep 13 22:34:03 2010 +0900 3rd commit commit 7030ca1a667b088517de9a31fdeb7f1389a21397 Author: bi_na <email address> Date: Mon Sep 13 22:31:08 2010 +0900 2nd commit commit d3184855f5a16f583df2a24045683f58953b1f3c Author: bi_na <email address> Date: Mon Sep 13 22:28:43 2010 +0900 1st commit
emailが表示されるところはスパムがくるとヤなので、email addressと置換してます。
これが標準のログ出力ですがフォーマットを色々いじれます。
$ git log --pretty=oneline efe1f74d0c211bf854d8e08257f5a3d24a949c3c 3rd commit 7030ca1a667b088517de9a31fdeb7f1389a21397 2nd commit d3184855f5a16f583df2a24045683f58953b1f3c 1st commit
これは
コミットを一意に決めるハッシュ値 コミット時のメッセージ
という書式で表示してくれます。
自分でフォーマットを指定するなら、
$ git log --pretty=format:"%H | %ci" efe1f74d0c211bf854d8e08257f5a3d24a949c3c | 2010-09-13 22:34:03 +0900 7030ca1a667b088517de9a31fdeb7f1389a21397 | 2010-09-13 22:31:08 +0900 d3184855f5a16f583df2a24045683f58953b1f3c | 2010-09-13 22:28:43 +0900
こんな感じでできます。
-pは直前のコミットとのdiffを表示
-pを付けると、直前のコミットとのdiffを表示してくれます。
$ git log -p commit efe1f74d0c211bf854d8e08257f5a3d24a949c3c Author: bi_na <binagitmail@gmail.com> Date: Mon Sep 13 22:34:03 2010 +0900 3rd commit diff --git a/n.txt b/n.txt index f7c6dd0..b23625e 100644 --- a/n.txt +++ b/n.txt @@ -1 +1 @@ -11111 +2222222222 .. 以下略
さっきの自前のフォーマットとの合わせ技も可能
$ git log --pretty=format:"%H | %ci" -p efe1f74d0c211bf854d8e08257f5a3d24a949c3c | 2010-09-13 22:34:03 +0900 diff --git a/n.txt b/n.txt index f7c6dd0..b23625e 100644 --- a/n.txt +++ b/n.txt @@ -1 +1 @@ -11111 +2222222222 .. 以下略
--graphが個人的にお気に入り
--graphを使うと アスキーアートでグラフを表示してくれます。
これはブランチを切ったときなどには使うようですが、ブランチを切っていなくても、
前に*などが表示されるため、ちょっと読みやすくなります(あくまで個人的意見)
$ git log --graph * commit efe1f74d0c211bf854d8e08257f5a3d24a949c3c | Author: bi_na <email address> | Date: Mon Sep 13 22:34:03 2010 +0900 | | 3rd commit | * commit 7030ca1a667b088517de9a31fdeb7f1389a21397 | Author: bi_na <email address> | Date: Mon Sep 13 22:31:08 2010 +0900 | | 2nd commit | * commit d3184855f5a16f583df2a24045683f58953b1f3c Author: bi_na <email address> Date: Mon Sep 13 22:28:43 2010 +0900 1st commit
前のリビジョン(バージョン)のソースを取り出す
前のリビジョンのソースを取り出してみたいと思います。
まず、取り出す前に、ソースの確認をしてみましょう。
次のコマンドで1回目のコミットで a.txt と n.txtが加わっているのがわかります。
$ git log --name-status commit efe1f74d0c211bf854d8e08257f5a3d24a949c3c Author: bi_na <email address> Date: Mon Sep 13 22:34:03 2010 +0900 3rd commit M n.txt commit 7030ca1a667b088517de9a31fdeb7f1389a21397 Author: bi_na <email address> Date: Mon Sep 13 22:31:08 2010 +0900 2nd commit M a.txt commit d3184855f5a16f583df2a24045683f58953b1f3c Author: bi_na <email address> Date: Mon Sep 13 22:28:43 2010 +0900 1st commit A a.txt A n.txt
それでは1回目のコミットでのa.txtの内容を確認してましょう。
$ git show d3184855f5a16f583df2a24045683f58953b1f3c:a.txt AAAAA
ほら! 見ることができました!
書式は以下の通り。
$ git show コミットを一意に決めるハッシュ値:ファイル名
これでもファイルの中身が見れたので、いいんですけど、ファイル自体を取り出すには、
git checkout
を使います。
git checkoutはブランチを切り替えるといきによく使われるようですが、
パス名が与えられた場合はまったく違う動作をするようです。
ここ重要ですね、パス名が与えられた場合はブランチの切り替えではない動作!!
$ git checkout d3184855f5a16f583df2a24045683f58953b1f3c a.txt
showのときと書式が微妙に違うのですが、これで取り出せるようです。
何も言われず、いきなり置き換わっちゃうのがドキドキものですが、とりだすことはできたみたいです。
参考:
Git ユーザマニュアル (バージョン 1.5.3 以降用)
git log から作業日報を捻出する - Hello, world! - s21g
Subversion ユーザーが Git を使ってみた (基本操作編) - まちゅダイアリー(2010-05-06)
http://progit.org/book/ja/ch2-3.html
git log - Webtech Walker