Git克隆特定版本的远程仓库
我大约在一个月前克隆了一个远程git仓库。 远程仓库经历了许多变化,现在变得不稳定了。 现在我需要另一个版本库,版本与我在一个月前克隆的版本相同。
我该怎么做呢?
您可以“重置”您的存储库到任何你想要的提交(例如1个月前)。
使用git-reset :
git clone [remote_address_here] my_repo cd my_repo git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
你可以简单地使用
git checkout commithash
在这个序列
git init git clone `URLTORepository` cd `into your cloned folder` git checkout commithash
提交哈希看起来像这样“45ef55ac20ce2389c9180658fdba35f4a663d204”
使用git log
来查找要回滚的修订版本,并记下提交哈希。 之后,你有两个select:
-
如果你打算在修订之后提交任何东西,我build议你签出一个新的分支:
git checkout -b <new_branch_name> <hash>
-
如果你不打算在修订版本之后提交任何东西,你可以简单的在没有分支的情况下签出:
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.
这样你就不会丢失任何信息,所以当它变得稳定的时候,你可以移动到一个更新的版本。
与集中版本控制系统不同的是,Git克隆了整个版本库,所以你不仅可以获得当前的远程文件,而且还可以获取整个历史。 您本地存储库将包括所有这一切。
当时可能有标签标记特定的版本。 如果没有,你可以在本地创build它们。 一个好的方法是使用git log
或者更多的可视化工具,如gitk
(也许gitk --all
所有的分支和标签)。 如果你能发现当时使用的提交哈希,你可以使用git tag <hash>
来标记它们,然后在新的工作副本中检查这些git tag <hash>
(例如git checkout -b new_branch_name tag_name
或者直接用哈希代替标签名)。
你所需要的源代码树在git仓库中仍然可用,但是,你将需要你感兴趣的提交的SHA1。我假设你可以从你拥有的当前克隆中获得SHA1?
如果你能得到那个SHA1,你可以在那里创build一个分支/重置来拥有相同的存储库。
根据Rui的回答命令
当我正在寻找某个作者(例如我自己)的提交时,我将过滤日志
git log --author=[authorname]
可能git reset
可以解决你的问题。
git reset --hard -#commit hash-