只要您更改了假符号链接文件的内容,而没有将其模式从符号链接更改为常规文件并提交了结果,您就创建了一个无法在具有真正符号链接的操作系统上提取的 blob,因为您有一个应该是符号链接的对象,但它的内容太长而不能成为路径名。隐藏此问题,Web 界面对您没有任何好处。
您可能必须备份到该提交,修复它,然后重新提交所有内容。 git rebase -i 会有所帮助,但它仍然可能并不容易,特别是如果您在文件处于这种虚假的符号链接但不是真正的符号链接状态时对文件进行了更多更改。
假设错误提交是abcdef123,你需要这样做:
git rebase -i 'abcdef123^'
这将使您进入带有提交列表的编辑器。 abcdef123 应该在第一行。在该行上,将pick 更改为edit。如果有多个错误提交,请将它们全部更改为 edit。保存并退出编辑器。
现在您将回到您提交错误文件的时间点。这是你改变历史、纠正曾经出错的事情的机会。使用
检查提交
git show
并通过将原始符号链接路径名恢复到文件中并git adding 来撤消坏的部分。或者你可以用git rm 正确地删除符号链接,然后创建一个新文件和git add。如果您选择第一个选项,请注意符号链接的内容只是路径名。它不是文本文件 - 它最后没有换行符。如果您使用添加换行符的文本编辑器对其进行编辑,则符号链接会损坏(指向名称中带有换行符的文件)。
完成git add 后,将固定提交重新插入其历史位置:
git commit --amend
git rebase --continue
如果您将多个提交从 pick 更改为 edit,则必须对每个提交重复该过程。最后的git rebase --continue 将带你回到现在。
如果您在变基期间处于过去的提交中并且您发现整个提交是错误的(除了将符号链接替换为它指向的文件的未修改内容之外,它什么也没做),那么您可以 git rebase --skip 代替的修改和继续。如果您提前知道这会发生,您可以从git rebase -i 列表中删除错误提交,而不是将其pick 更改为edit。
如果您有多个分支受到错误提交的影响,您将不得不为每个分支重复整个过程。签出一个分支,运行git rebase -i 直到完成(此时git rebase --continue 说“成功重新定位”),然后签出下一个分支并再次执行。
将来,当您在 Windows 和真实操作系统之间拆分开发工作时,您的 Windows 是否与 cygwin 一起工作。在 cygwin 中,符号链接就是符号链接,你不能像以前那样把它们弄乱。