git 从远程存储库中获取特定修订

dlr*_*ust 63 git

我们有一个远程 git 存储库,我们通常git push在我们的开发服务器git pull上使用它进行部署,然后在我们的实时服务器上使用它来获取最新推送的存储库版本。

但是,如果我们已经提交并推送了一些修订(没有git pull在实时服务器上),我们如何做一个git pull指的是我们想要的旧提交?

即类似的东西 git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4

小智 77

拉取存储库后,您应该可以:

git checkout 3ef0d...
Run Code Online (Sandbox Code Playgroud)

  • 也许OP问错了问题,但对我来说这是正确的问题,这不是答案。服务器上有一个本地缺少的特定提交。提交既不是分支的一部分,也不是标签的一部分,也不会通过拉取/提取进行传输。如何获取特定的提交? (2认同)

Cir*_*郝海东 11

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"
Run Code Online (Sandbox Code Playgroud)