概要
2015年にリリースされた Git 2.5 からリポジトリの設定を変更することで特定のコミットだけを取得できるようになりました。詳細な解説は stackoverflow の回答をご参照ください。練習として Git のテストケース (t/t5516-fetch-push.sh) を手で実行してみました。
テストのリポジトリをつくる
リポジトリをつくり、uploadpack.allowtipsha1inwant
を有効にします。
git init testrepo
cd testrepo
git config uploadpack.allowtipsha1inwant true
コミットの履歴をつくってみましょう。
git commit --allow-empty -m foo
git commit --allow-empty -m bar
git commit --allow-empty -m baz
コミットのハッシュを調べて変数 $SHA1
に記録しておきます。次のコマンドでは最新のコミットから1つ前のコミットのハッシュを取得します。
SHA1=$(git rev-parse HEAD^1)
.git のパスを指定することもできます。
SHA1=$(git --git-dir=testrepo/.git rev-parse HEAD^1)
shallow リポジトリをつくる
git init shallow
cd shallow
git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true
fetch してみましょう。$SHA1
は取り込みたいコミットのハッシュです。
git fetch --depth=1 ../testrepo/.git $SHA1
コミットされた内容を調べてみましょう。
git cat-file commit $SHA1
今度は merge してみましょう。
git merge $SHA1
ログを調べてみましょう。1つのコミットしか存在しないはずです。
git log
コミットのハッシュを調べる
一番単純な方法は git log
ですが、ハッシュ以外の情報は不要なので、ハッシュだけを求めるためのコマンドを使ってみましょう。
まずは最新のコミットのハッシュを求めてみます。
git rev-parse HEAD
短縮形を求めてみましょう。
git rev-parse --short HEAD
ブランチの名前を指定して調べることもできます。
git rev-parse master
1つ前のコミットのハッシュを調べてみましょう。
git rev-parse HEAD~1
ハッシュのリストを求めてみましょう。
git rev-list HEAD
数を制限することができます。
git rev-list HEAD -n 2