Git在移动了.git目录后无法检测到更改。

7

我在添加和修改文件之前,不小心将.git文件夹移出了我的工作目录。当我在做出更改后重新放回.git文件夹时,git没有捕捉到这些更改(我使用了git add .git commit -a)。我试图重现这个问题但失败了。有没有一种方法可以强制git扫描源代码树中的更改,或者其他的修复方法?


2
我也无法重现。Git不会监视您的工作目录,因此每当您使用相关命令时,应扫描更改。 - hammar
我可能漏掉了什么,但是要“扫描源代码树中的更改”,通常使用git statusgit diff的组合。 - UncleZeiv
这就是我所理解的,但我无法解释为什么git status显示干净,但本地和远程之间存在差异。分支相同等等。 - Matt Hampel
1
.git/index存在吗?如果不存在,尝试执行 git checkout <分支名称>。这不会覆盖任何已更改或添加的文件。Git通过索引来查看文件是否存在或需要更改/更新,如果你删除了 .git 目录然后重新创建它,可能会导致索引不存在。 - X-Istence
1
只是一个猜测,你能否尝试更新时间戳?例如从存储库根目录执行 find . -type f | xargs touch - Harald Schilly
显示剩余3条评论
2个回答

1

不要试图将新的git文件夹“适配”到项目中,你应该:

  1. 在同一台计算机上克隆一个新的repo。
  2. 将所有旧文件(除了.git文件夹)放入新文件夹中。
  3. 这将给你所有新修改的文件和在“git status”中列出的新文件。
  4. 现在,您可以提交并推送它们,而不会遇到任何问题。

在我看来,这是处理这种棘手情况的最佳方法,我自己也遇到过几次。但是,如果您的repo与中央repo之间的差异太大,就无法做到这一点,这会迫使您进行一个巨大的提交,有时并不理想。

自从您提出问题以来已经过了很长时间,希望这能为解决问题带来一些启示。


0

很不幸,我经常这样做。我有一个.git仓库/目录,我会在其中移动到和移出许多“发布版本”(来自另一个VC系统)。当我将.git移入时,我可以执行“git status”并查找新版本中发生了什么变化。然后我就可以毫不费力地执行“git add -A; git commit -m 'release-xyz'”。我甚至可以使用“git symbolic-ref HEAD ...”更改分支,而无需进行checkout。完成发布提交后,我将.git移出,也可以执行所有的“git diff branch1..branch2”和其他操作。

所以,我不认为你描述的是一个问题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接