如何处理未提交的更改

What to do about uncommitted changes

我刚刚将我的文件从旧 PC 迁移到新 PC。这包括一些开发 git 存储库。

但我猜是因为文件被复制了,日期戳不同,所以 git 现在将它们视为未提交的更改,即使文件没有其他更改。

最好的办法是什么,只需提交文件,或者是否有一些 git 魔法(命令)告诉 git 一切正常?

git查看文件的内容

修改日期是指示应重新计算索引的触发器,但如果文件在同一位置具有完全相同的内容,则不会显示为“已修改”。


为了确认文件有不同的内容,您可以查看git计算的散列:

# get the hash for the file in the current commit :
git ls-tree HEAD path/to/file

# compute the hash for the file on disk :
git hash-object path/to/file

如果哈希值相等,您可能遇到了索引未正确刷新的问题,请尝试 运行 :

git update-index --refresh

让git重新检查所有文件(注意:如果在那之后文件仍然显示为已修改,请添加评论或更新您的问题,会有确实发生了一些奇怪的事情)

哈希值不同,内容肯定不同。您将不得不仔细查看该文件的两个版本之间发生了什么变化,例如通过比较每个版本的十六进制转储。

TLDR:文件 复制 回购而不是 git 跨不同文件系统克隆它们(EXT4 vs NTFS/FAT32) 会让 git 抱怨。

完整答案:

在 Git 与一位知识渊博的朋友交谈时,他发现了这个问题。

在将我的数据(包括存储库)从具有 Linux 文件系统的旧 PC 迁移到新的 Linux PC 时,由于没有网络连接,我将所有内容复制到 USB HD 上,它是用 Window 的文件系统格式化的,因此丢失了一些文件信息并且 Git 报告所有内容都必须重新签入。

所以解决方案是仅在 Linux 文件系统上移动存储库。

我在 Linux 文件服务器上设置了一个远程仓库,将本地工作仓库从旧 PC 推送到远程 git 服务器,然后将远程仓库克隆到新 PC。

加分:

克隆没有拉出所有远程分支。我找到了拉取所有远程分支的解决方案。

git-全拉 https://gist.github.com/grimzy/a1d3aae40412634df29cf86bb74a6f72

#!/usr/bin/env bash

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

感谢大家的帮助、时间和建议。