【发布时间】:2014-03-31 10:35:24
【问题描述】:
我遇到以下情况:同事提交了一堆带有 Windows 行结尾的文件。我们有一个.gitattribute,它在commit 期间删除了Windows 行尾。
这意味着在pull 之后,我有几十个文件被标记为“本地更改”,而实际上它们没有。我无法检查它们,因为 Git 会将(损坏的)文件从存储库中取出(它具有 Windows 行结尾),修复行结尾以最终得到一个始终与当前存储库中的文件不同的文件。
团队的一名成员已修复这些文件并提交并推送它们。
这个问题以丢失所有本地提交(即尚未推送的所有内容)为代价回答了我的问题:How do I force "git pull" to overwrite local files?
如何在不丢失本地提交的情况下拉取?
这是我在服务器上的 Git 存储库:
A --> B --> BAD1 --> FIX1(HEAD)
BAD1 包含错误提交,FIX1 修复它们。
这是我目前磁盘上的内容:
A --> B --> BAD1 --> LC1 --> LC2(HEAD)
\---> FIX1
我是通过git pull --rebase 到达这里的。在那个命令之前,我有:
A --> B --> LC1 --> LC2(HEAD)
我想结束的是:
A --> B --> BAD1 --> FIX1 --> LC1 --> LC2(HEAD)
【问题讨论】:
-
.gitattributes不会删除 Windows 行尾在拉取和结帐时,它会删除它们在提交。根据您的设置,Windows 行尾仅在结帐时恢复。 -
@Cupcake:啊啊啊啊……现在,这种行为开始变得(更)有意义了。出于某种原因,提交包含 Windows 行结尾,我通过 pull/checkout 得到它们。 Git 如何在
diff和status期间注意到这样的文件不同?diff是否也应用这些属性?