4

在我的仓库中,我发现有些文件不存在git ls-tree但存在于git ls-files. 我所做的是:在工作区目录中

~/wsp$ git clone ~/repo/project1
~/wsp$ rm project1/file1
~/wsp$ git add -A
~/wsp$ git commit -m'deleted file1'
~/wsp$ git push

在回购目录

~/repo$ git log
<deleted file1 commit msg is there>
~/repo$ git ls-tree
<file1 is not in ls-tree>
~/repo$ git ls-files
<file1 is still there!>
~/repo$ find . -name file1
~/repo/file1

因此,尽管在工作区目录中,file1 似乎仍然存在于 repo 目录中,但 file1 已被删除、git-rm'ed、提交并推送到 repo。

如何将一个 git 目录中已删除或重命名的文件推送到另一个 git 目录?

提前致谢 :)

4

1 回答 1

3

不要推入非裸存储库

您更改了 的 repo 状态~/repo,但没有更改工作目录。当您git status进入时repo,您会看到 git 认为您手动进行了一些更改,因为您的 repo 状态与您的工作目录/索引不匹配。

如果您希望差异消失,则需要运行git reset --hard. repo但这将消除您在工作目录中所做的任何更改。

你不应该一开始就推到repo。您应该只推送到裸存储库(没有工作副本的存储库)。您可以从非裸回购中提取。因此,获取更改的正确方法是进入wsp并从中提取。reporepowsp

或者是否有任何特定原因需要推动非裸回购?

于 2013-04-29T14:18:29.170 回答