由于git是一个分布式VCS,因此它应该具有对存储库所做更改的完整历史记录。
那么我们可以提取首先克隆的那个版本的repo吗?
实际上我在现有的本地回购中做了很多改动。并且不希望通过丢失数据来恢复到原始状态。但我想使用现有的git对象(blob / tree)将原始存储库(我最初克隆的)提取到其他位置。
注意:我现在无法访问git服务器。
试试这个:
git clone SOURCE_PATH NEW_PATH # clones everything you have committed up to now
cd NEW_PATH # go to new clone, don't modify the pre-existing one
git reset --hard REV # REV is the revision to "rewind" to (from git log)
因此,您需要明确指出要返回的修订版(Git可能不知道您最初克隆的修订版,但可能您可以弄明白)。第一步是从本地磁盘克隆到不同目录中的本地磁盘,这样您就可以保持现有工作不变。
如果我理解正确,你从远程仓库克隆你的项目(调用本地repo - local_repo_1
),之后你对它进行了一些更改(uncommited),现在你想拥有原始克隆git仓库的另一个副本,但是来自local_repo_1
,而不是来自偏远地区。
您可以通过以下步骤执行此操作:
git stash save stash_name //give any name to your stash, say local_repo_2
cd ..
克隆
git clone /path/to/local_repo_1 local_repo_2 // local_repo_2 is the new repo
如果你有一些本地提交,那么做一个
git log
并将其重置为所需的SHA
git reset --hard SHA
local_repo_1
并申请你的存储
git stash apply
瞧,现在你有: local_repo_1:您在裸仓库上方所做的更改,恢复到原始格式。 local_repo_2:没有本地更改的远程仓库的副本
是的你绝对可以做到。
尝试这样的事情
让我们说你克隆了
c:/originalRepository
切换到新文件夹然后说
git clone file:///c:/originalRepository
您将在早期克隆您的仓库。
您可以将此脚本添加到bash中
reclone () {
set -e
basename=${PWD##*/}
remoteurl=$(git remote get-url --push origin)
cd ..
echo $basename
echo $remoteurl
rm -rf $basename
git clone $remoteurl
cd $basename
set +e
}
你可以做一个新的分支
git checkout -b original-state REV