Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上具有无效字符的Git提交_Windows_Git_Version Control_Repository_Invalid Characters - Fatal编程技术网

Windows上具有无效字符的Git提交

Windows上具有无效字符的Git提交,windows,git,version-control,repository,invalid-characters,Windows,Git,Version Control,Repository,Invalid Characters,我得到了一个Git存储库,4年前我意外地推送了一个文件,该文件位于(相对于存储库根文件夹的路径):/Core/C:/testoutput/agwqe1s.xml 我在我的Linux机器上完成了这项工作,因此实际创建的文件没有任何问题。问题是,当我回到我的Windows计算机时,我无法切换到包含此文件的分支,因为Windows只是拒绝创建这样的文件夹。好的,没问题,我在我的Linux端删除了这个文件并提交了它,但即使很难,它也不起作用。Git仍然试图在我的Windows机器上创建这个非法文件,我不

我得到了一个Git存储库,4年前我意外地推送了一个文件,该文件位于(相对于存储库根文件夹的路径):/Core/C:/testoutput/agwqe1s.xml

我在我的Linux机器上完成了这项工作,因此实际创建的文件没有任何问题。问题是,当我回到我的Windows计算机时,我无法切换到包含此文件的分支,因为Windows只是拒绝创建这样的文件夹。好的,没问题,我在我的Linux端删除了这个文件并提交了它,但即使很难,它也不起作用。Git仍然试图在我的Windows机器上创建这个非法文件,我不知道该怎么办


我知道我可以从头开始重新制作回购协议,但随后我就失去了整个提交日志历史记录,我想避免这种情况。我在这里有什么选择?

您不需要签出该分支来更新它。从工作的分支执行以下操作:

git fetch
git push . origin/problembranch:problembranch
git checkout problembranch

诀窍是推送到同一个存储库。这就是
的作用。

不熟悉git,但认为必须删除
C:
文件夹及其所有子文件夹(文件夹和文件)。但是你写的是“删除了文件”,我删除了文件和文件夹。Git不存储空文件夹。分支已更新,问题是当我尝试签出到分支时,发生的情况是:无效参数
/Core/C://
,因为这是非法文件名。请在Linux中更新分支。把它推上去。在不同分支上的windows上获取它。仅在执行我发布的push命令后签出分支。不起作用。我做了这个
git过滤器分支--index filter'git rm--cached--ignore unmatch FILENAME'\--prune empty--tag name filter cat--all
从感谢您的时间@adamdymitruk获得了这个解决方案,该部分不起作用。如果获取成功,则推送将更新分支,而无需将其签出。既然分支指向了一个提交树,而该树没有无效路径,那么将其签出应该是可行的。您在这里所做的工作的问题是,其他人可能会因为更改了Sha1而措手不及。我的解决方案使它们保持不变。你所做的只是增加一个承诺来修复损坏。如果父回购协议是子模块,那么您的回购协议可能会严重损害父回购协议。如果其他人也在考虑这个问题,我添加这个是为了完整性。我做错了,你是对的,它成功了。我发布的解决方案如果做错了,可能会严重损害回购协议。