只要您更改了假符号链接文件的内容而不将其模式从符号链接更改为常规文件并提交了结果,您就制作了一个无法在具有真实符号链接的操作系统上提取的 blob,因为您有一个应该是符号链接但其内容太长而不能成为路径名的对象。通过隐藏此问题,Web 界面对您没有任何帮助。
您可能必须备份到那个提交,修复它,然后重新提交它之后的所有内容。git rebase -i
会有所帮助,但它仍然可能并不容易,特别是如果您在文件处于这种虚假的符号链接但不是真正的符号链接状态时对文件进行了更多更改。
假设错误的提交是abcdef123
,你需要这样做:
git rebase -i 'abcdef123^'
这将使您进入带有提交列表的编辑器。abcdef123
应该在第一行。在该行上,更改pick
为edit
。如果有多个错误提交,请将它们全部更改为edit
. 保存并退出编辑器。
现在您将回到您提交错误文件的时间点。这是你改变历史、纠正曾经出错的事情的机会。检查提交
git show
并通过将原始符号链接路径名恢复到文件中并对其进行git add
ing 来撤消坏的部分。或者你真的可以用 正确摆脱符号链接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 内部,符号链接是符号链接,你不能像以前那样把它们弄乱。