大约一个月前,我克隆了一个远程的git仓库。这个远程仓库经历了很多变化并且现在变得不稳定。现在我需要另一个仓库的副本,其版本与我一个月前克隆的那个完全相同。
我该怎么做?
git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
master
分支。如果除了master
之外的其他分支是你的主开发分支,则在运行git reset
命令之前必须先检出该分支。 - Steve Follygit checkout -b new_branch hash
命令,它可以基于给定的哈希值创建一个全新的分支,而不会影响任何其他分支。如果移动现有分支的HEAD,可能会在将来推送到远程服务器时出现问题。 - Loïc Faure-Lacroixgit pull origin [branch]
,否则,据我所知,它就丢失了。 - Rui Carneiro您可以简单地使用
git checkout commithash
在这个序列中
git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash
提交哈希看起来像这样“45ef55ac20ce2389c9180658fdba35f4a663d204”
git reset --hard
,而改用 git checkout commit-hash
。git reset --hard
会删除部分 Git 历史记录,有时并不是理想的选择。 - Jordan Stewartgit log
查找要回滚的版本,并记录提交哈希值。之后,您有两个选项:
如果您计划在该版本之后提交任何内容,我建议您切换到一个新分支: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 checkout develop
命令,其中 develop 是您的分支名称。 - Steve Taubergit clone -b branch_or_tag_name repo_address_or_path
uploadpack.allowReachableSHA1InWant
# 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 reset --hard sha
其中 sha
指的是哈希值,例如:85a108ec5d8443626c690a84bc7901195d19c446
你可以使用以下命令获取所需的哈希值:
git log
你要求取的源代码仍然在git仓库中可用,但是你需要所感兴趣的提交的SHA1。我假设你可以从当前拷贝中获取SHA1?
如果你能获取到SHA1,那么你可以创建一个分支/重置到该提交以获得相同的仓库。
命令如Rui的回答所述
可能 git reset
可以解决你的问题。
git reset --hard -#commit hash-