4

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

几周后,远程 git 存储库更新了新功能,我想利用这些新功能而不会失去几周的工作。有什么方法可以更新源代码,/var/my-site而无需使用新功能精心编辑每个文件、拖放、剪切和粘贴等,并且仍然保持我以前的工作?

只是将.git文件夹从/tmp工作中移动/var/my-site,还是不像我想的那么容易?

4

3 回答 3

3

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

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

于 2013-01-09T14:13:19.313 回答
2

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

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

  • 提交您的更改,然后运行git pull以与远程合并。
  • 或存储您的更改(git stash),运行拉取然后应用您的更改(git stash popgit stash apply保留存储)
于 2013-01-09T14:13:05.543 回答
1

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

大致上,这看起来像这样:

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

如果您很难找到原始提交 ID,您可以使用该git reflog命令提供您最后一次分支更改提示的历史记录。如果你是最近才拉的,而且有很多变化,你可以HEAD在拉之前找到旧的。

于 2013-01-09T14:21:16.120 回答