我们可以从现有的本地存储库中重新放入一个git存储库

时间:2014-03-10 06:05:31

标签: git git-clone git-revert

由于git是一个分布式VCS,它应该具有对存储库所做更改的完整历史记录。

那么我们可以提取首先克隆的那个版本的repo吗?

实际上我在现有的本地仓库中做了很多改动。并且不希望通过丢失数据来恢复到原始状态。但我想使用现有的git对象(blob / tree)将原始存储库(我最初克隆的)提取到其他位置。

注意:我现在无法访问git服务器。

5 个答案:

答案 0 :(得分:4)

试试这个:

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可能不知道你最初克隆的修订版,但可能你可以搞清楚)。第一步是从本地磁盘克隆到不同目录中的本地磁盘,这样就可以保持现有工作不受影响。

答案 1 :(得分:2)

如果我理解正确,你从一个远程仓库克隆你的项目(调用本地仓库 - local_repo_1),之后你对它进行了一些修改(uncommited),现在你想要另一个副本原始克隆的git repo,但来自local_repo_1而不是来自远程。

您可以通过以下步骤执行此操作:

  1. 将您的作品保存在藏匿处 git stash save stash_name //give any name to your stash, say local_repo_2

  2. 现在你将留下你从遥控器克隆的裸仓库,你可以通过以下方式克隆它:
    离开你的git repo
    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

  3. 最后你可以回到你的local_repo_1并申请你的存储 git stash apply

  4. Voila,现在你有:
    local_repo_1 :您在裸仓库上方所做的更改,返回原始格式。
    local_repo_2 :没有您本地更改的远程仓库的副本

答案 2 :(得分:0)

是的,你可以绝对做到。

尝试这样的事情

让我们说你克隆了

c:/originalRepository

切换到新文件夹然后说

git clone file:///c:/originalRepository

您之前将克隆您的仓库。

答案 3 :(得分:0)

您可以将此脚本添加到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 }

答案 4 :(得分:-1)

你可以创建一个新分支

git checkout -b original-state REV