协调在git存储库外部进行的更改

时间:2013-01-09 14:04:44

标签: git

我已将git repo克隆到我服务器上的/tmp。然后我继续将git repo的内容复制到/var/my-site,而没有实际复制.git文件本身。这是几个星期前。我对/var/my-site目录进行了一些更改,而不必担心在我初始安装到.git/var/my-site文件夹没有被移动。

几周之后,远程git repo已经更新了我希望利用的新功能,而不会丢失数周的工作。有没有什么方法可以更新/var/my-site的源代码,而无需使用新功能,拖放,剪切和粘贴等精心编辑每个文件,仍然保持我以前的工作?

.git文件夹从/tmp移动到/var/my-site是否正常工作,还是这不像我想的那么容易?

3 个答案:

答案 0 :(得分:3)

你还有/tmp中的克隆吗?如果是这样,您可以将文件从/var/my-site复制回该克隆,提交它们(因为这是您自己的存储库分支),然后合并远程存储库中的更改。这将为您提供一个包含所有远程更改和更改的最新分支。然后,您可以将其复制回/var/my-site

如果您没有原始克隆,可以尝试创建远程存储库的新克隆并将文件复制到该克隆,但生成的更改集可能会令人困惑。如果你有最初制作的克隆,那就容易多了。

答案 1 :(得分:2)

  

只是将.git文件夹从/ tmp移动到/ var / my-site工作,或者这不像我想的那么容易。

此时,my-site目录成为git存储库,您将能够:

  • 提交更改,然后运行git pull以与远程合并。
  • 或隐藏您的更改(git stash),然后运行提取,然后应用您的更改(git stash popgit stash apply以保留存储空间)

答案 2 :(得分:1)

第一次克隆它时,找到哪个提交的HEAD的麻烦不那么麻烦。然后,您可以将修改后的文件复制到当前分支指向此头的存储库中,提交更改并尝试与远程存储库的上次更新合并。

粗略地说,这看起来像这样:

git checkout -b temp
git reset --hard {OLDCOMMIT}
cp /var/my-site/* .
[commit changes]
git merge origin/master

如果您很难找到原始提交ID,可以使用git reflog命令,该命令提供您最后一次分支更改提示的历史记录。如果您最近只提取并进行了大量更改,那么您可以在拉动之前找到旧的HEAD