3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リモートブランチから特定のコミットだけを取得する

Posted at

概要

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
3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?