如何处理未提交的更改
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
感谢大家的帮助、时间和建议。
我刚刚将我的文件从旧 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
感谢大家的帮助、时间和建议。