由于git是一个分布式VCS,所以它应该有对存储库所做更改的完整历史记录。
那么,我们能不能提取,这个版本的回购是第一个克隆的?
事实上,我已经做了很多改变,我现有的本地回购。并且不希望通过丢失数据而恢复到原始状态。但是,我希望使用现有的git对象(blob/tree)将原始存储库(最初克隆的)提取到其他位置。
注意:我现在没有访问git服务器的权限。
发布于 2014-03-10 06:43:00
试试这个:
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可能不知道您最初克隆的是哪个版本,但很可能您可以找到它)。第一步是从本地磁盘克隆到不同目录下的本地磁盘,这样就可以保持现有工作不受影响。
发布于 2014-03-10 06:51:47
如果我正确理解,您将您的项目从远程回购(称为本地回购- local_repo_1)中克隆出来,之后您对其进行了一些更改(未提交),现在您希望获得原始克隆的git的另一个副本,而不是来自local_repo_1,而不是来自远程。
您可以在以下步骤中完成此操作:
git stash save stash_name //give any name to your stash, say local_repo_2cd ..
无性系
git clone /path/to/local_repo_1 local_repo_2 // local_repo_2 is the new repo
如果您也有一些本地提交,那么执行一个
git log
并将其重置为所需的SHA。
git reset --hard SHAlocal_repo_1并应用您的藏品。
git stash apply瞧,现在你有:
local_repo_1:你的改变,你已经做了以上的裸露回购,回到原来的形式。
local_repo_2:远程回购的副本而不需要您的本地更改
发布于 2019-04-02 10:55:16
您可以将此脚本添加到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
}https://stackoverflow.com/questions/22293118
复制相似问题