由于 git 是一个分布式 VCS,它应该具有对存储库所做更改的完整历史记录。
那么我们可以提取首先克隆的那个版本的 repo 吗?
实际上,我在现有的本地仓库中做了很多更改。并且不想通过丢失数据恢复到原始状态。但我想使用现有的 git 对象(blob/tree)将原始存储库(我最初克隆的)提取到其他位置。
注意:我现在无权访问 git 服务器。
由于 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 可能不知道您最初克隆的是哪个修订版,但您可能可以弄清楚)。第一步只是从本地磁盘克隆到不同目录中的本地磁盘,这样您就可以保持现有工作不受影响。
如果我理解正确,您从远程仓库克隆了您的项目(调用本地仓库 - local_repo_1
),之后您对其进行了一些更改(未提交),现在您想要拥有原始克隆 git 仓库的另一个副本,但是来自而local_repo_1
不是来自远程。
您可以按照以下步骤执行此操作:
将您的工作保存在一个藏匿处
git stash save stash_name //give any name to your stash, say local_repo_2
现在你会留下你从远程克隆的裸仓库,你可以通过以下方式克隆它:
从你的 git repo
cd ..
clone移出
git clone /path/to/local_repo_1 local_repo_2 // local_repo_2 is the new repo
如果你也有一些本地提交,然后执行 a
git log
并将其重置为所需的 SHA
git reset --hard SHA
最后你可以回到你的local_repo_1
并应用你的藏匿处
git stash apply
瞧,现在您有了:
local_repo_1:您在裸仓库之外所做的更改,恢复为原始形式。
local_repo_2:远程仓库的副本,没有您的本地更改
您可以将此脚本添加到您的 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
}
是的,你绝对可以做到。
尝试这样的事情
假设您已克隆到
c:/originalRepository
切换到新文件夹并说
git clone file:///c:/originalRepository
您将拥有之前克隆的存储库。
你可以新建一个分支
git checkout -b original-state REV