Git克隆特定版本的远程存储库

时间:2010-08-24 09:26:18

标签: git git-clone

我在一个月前克隆了一个远程git存储库。远程存储库经历了许多变化,现在变得不稳定。现在我需要另一个存储库副本,版本与我一个月前克隆的版本相同。

我该怎么做?

9 个答案:

答案 0 :(得分:206)

您可以将您的存储库“重置”为您想要的任何提交(例如,1个月前)。

使用git-reset

git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]

答案 1 :(得分:70)

你可以简单地使用

git checkout  commithash

按此顺序

git init    
git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash

commit hash看起来像这样“45ef55ac20ce2389c9180658fdba35f4a663d204”

答案 2 :(得分:31)

使用git log查找要回滚的修订版本,并记下提交哈希值。之后,您有两个选择:

  1. 如果您计划在修订后提交任何内容,我建议您结帐新分支: git checkout -b <new_branch_name> <hash>

    < / LI>
  2. 如果您不打算在修订后提交任何内容,则只需在没有分支的情况下结帐: git checkout <hash> - 注意:这会将您的存储库置于'分离的HEAD'状态,这意味着它当前没有附加到任何分支 - 然后you'll have some extra work to merge new commits to an actual branch

  3. 示例:

    $ git log
    commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
    Author: Jardel Weyrich <suppressed>
    Date:   Wed Aug 18 20:15:01 2010 -0300
    
        Added a custom extension.
    
    commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
    Author: Jardel Weyrich <suppressed>
    Date:   Wed Aug 18 20:13:48 2010 -0300
    
        Missing constness.
    
    $ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
    Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
    which isn't a local branch
    If you want to create a new branch from this checkout, you may do so
    (now or later) by using -b with the checkout command again. Example:
      git checkout -b <new_branch_name>
    HEAD is now at 4553c14... Missing constness.
    

    这样你就不会丢失任何信息,因此当它变得稳定时你可以转移到更新的版本。

答案 3 :(得分:5)

如果您需要获取的版本是分支或标记,则:

git clone -b branch_or_tag_name repo_address_or_path

答案 4 :(得分:2)

与集中式版本控制系统不同,Git克隆整个存储库,因此您不仅可以获取当前的远程文件,还可以获取整个历史记录。您本地存储库将包含所有这些。

当时可能有标记标记特定版本。如果没有,您可以在本地自己创建它们。执行此操作的一种好方法是使用git log或更可视地使用gitk等工具(可能gitk --all来查看所有分支和标记)。如果您可以发现当时使用的提交哈希值,则可以使用git tag <hash>标记它们,然后在新的工作副本中检查它们(例如git checkout -b new_branch_name tag_name或直接使用哈希而不是标记名称)。

答案 5 :(得分:1)

您可以这样解决:

git reset --hard sha

其中sha,例如:85a108ec5d8443626c690a84bc7901195d19c446

您可以使用以下命令获得所需的阴影:

git log

答案 6 :(得分:0)

您需要的源树仍然可以在git存储库中使用,但是,您需要您感兴趣的提交的SHA1。我会假设您可以从当前克隆中获取SHA1吗? / p>

如果你可以获得SHA1,你可以在那里创建一个分支/重置以拥有相同的存储库。

根据Rui的回答命令

答案 7 :(得分:0)

可能git reset解决了您的问题。

git reset --hard -#commit hash-

答案 8 :(得分:0)

uploadpack.allowReachableSHA1InWant

由于Git 2.5.0可以在服务器上启用此配置变量,因此此处是GitHub feature requestGitHub commit enabling this feature

Bitbucket Server enabled it since version 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"