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

nan*_*ndu 167 git git-clone

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

我该怎么做呢?

Rui*_*iro 220

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

使用git-reset:

git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
Run Code Online (Sandbox Code Playgroud)

  • 你没有提到它,但这只会重置`master`分支,默认情况下会在克隆上检出.如果`master`以外的分支是你的主要开发分支,必须先在`git reset`之前检出 (26认同)
  • 你为什么不做一个想要提交的简单结账? (16认同)
  • 因为在结账到特定提交后您将处于"分离的HEAD"状态. (10认同)
  • @RuiCarneiro最好使用`git checkout -b new_branch hash`你基于哈希创建一个新的分支而不接触任何其他分支.当将时间推送到远程服务器时,移动现有分支的头部可能会导致问题. (6认同)

M.O*_*man 83

你可以简单地使用

git checkout  commithash
Run Code Online (Sandbox Code Playgroud)

在这个序列中

git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash
Run Code Online (Sandbox Code Playgroud)

commit hash看起来像这样"45ef55ac20ce2389c9180658fdba35f4a663d204"

  • `git init`不是必需的 (8认同)
  • 我最喜欢这个答案.我认为应该避免使用`git reset --hard`,而采用`git checkout commit-hash`.`git reset --hard`删除了有时不可取的部分git历史记录. (7认同)

jwe*_*ich 34

使用git log找到你想要回滚到修改,并注意到提交散列.之后,您有两个选择:

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

  2. 如果您不打算在该修订版本之后提交任何内容,则只需在没有分支的情况下签出:git checkout <hash>- 注意:这将使您的存储库处于"分离的HEAD"状态,这意味着它当前未附加到任何分支 - 那么您'我将有一些额外的工作来将新提交合并到一个实际的分支.

例:

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

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

  • 但也不是说你是一个独立的头,这对于只读操作是可以的.但是当您打算从此修订版开始进行更改时,您需要创建一个新分支.有关更多信息,请参见http://sitaramc.github.com/concepts/detached-head.html. (2认同)

unc*_*chu 15

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

git clone -b branch_or_tag_name repo_address_or_path
Run Code Online (Sandbox Code Playgroud)