回答:
uploadpack.allowReachableSHA1InWant
Git 2.5.0以降、この構成変数はサーバー上で有効にできるため、ここではGitHub機能のリクエストとGitHubがこの機能を有効にします。
Bitbucket Serverは、バージョン5.5以降で有効にしました。
使用法:
# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
touch "$i"
git add "$i"
git commit -m "$i"
done
# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"
# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"
# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true
# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"
これにより、git pull
git checkout my-old-commit
現在はDETACHED HEAD状態のままになっていることに注意して
ください。事実上、このリポジトリ内の将来のコミットを新しいコミットパスに送信していることになります。デプロイメントリポジトリの場合、これは重大な問題ではありません。コミットされるのはプルされる前にすでに正しくコミットされているコミットのみである必要があるためです。
ただし、コミットマーカー(ヘッド、タグ、リモート)がマスターリポジトリと同一に見えることを確認すると便利な場合があります。チェックアウト後にこれを修正するには:git reset
-ヘッドを再接続し
ます
git fetch
-リモートのマーカーを同期します[これはgitバージョンに依存する可能性があります-確かに環境はまだ1.7 ...ですので、YMMVは不要になるかもしれません]
git pull server:repo
、通常とgit pull