如何解决签出单个已删除文件时pathspec与git已知的任何文件不匹配的问题?

如何解决签出单个已删除文件时pathspec与git已知的任何文件不匹配的问题?,git,git-checkout,Git,Git Checkout,我有一个分支功能,它来自开发,并且在它前面。 stash pops和merge developes的组合导致提交,其中包括特定文件的rm 我正在尝试通过在执行此删除之前从提交中签出文件来撤消此删除,方法是: name@machine ~/path/inside/the/repo/to/the/parent/dir $ git checkout megalongshaofthecommitthatdeletedthefile^ -- filename.ext 但是得到 error: pathsp

我有一个分支
功能
,它来自
开发
,并且在它前面。
stash pop
s和
merge develope
s的组合导致提交,其中包括特定文件的
rm

我正在尝试通过在执行此删除之前从提交中签出文件来撤消此删除,方法是:

name@machine ~/path/inside/the/repo/to/the/parent/dir
$ git checkout megalongshaofthecommitthatdeletedthefile^ -- filename.ext
但是得到

error: pathspec 'filename.ext' did not match any file(s) know to git.
我尝试签出尚未删除的文件,但git仍然拒绝签出未删除的文件

我如何告诉git从哪里获取此文件

我如何告诉git从哪里获取此文件

可以做些什么?
  • 如果需要,请使用
    git reflog
    并在更改之前签出上一次提交

    reflog是存储库的完整历史记录,允许您返回到任何所需的时间点

  • git log--follow
    将显示修改文件的提交(最后一次更改将是第一次更改)

    此命令将显示给定文件的所有日志条目,以便您可以获取所需的提交,并使用
    git checkout SHA-1 file\u path将文件形式保存在那里

  • git bisect
    搜索删除文件的提交位置

    对分是一种搜索“bug”和/或对存储库所做更改的方法,使用它来跟踪文件何时被删除。您可以编写脚本来搜索文件是否存在,并使用
    git bisect--run…
    标志运行它

  • 获得所需的SHA-1后,使用git revert SHA-1以“撤消”给定提交中所做的更改。为了安全起见,我想你想在一家新的分支机构做这件事

  • 如果只需要文件而不需要其余更改:
    git签出SHA-1——文件路径

  • 我如何告诉git从哪里获取此文件

    可以做些什么?
  • 如果需要,请使用
    git reflog
    并在更改之前签出上一次提交

    reflog是存储库的完整历史记录,允许您返回到任何所需的时间点

  • git log--follow
    将显示修改文件的提交(最后一次更改将是第一次更改)

    此命令将显示给定文件的所有日志条目,以便您可以获取所需的提交,并使用
    git checkout SHA-1 file\u path将文件形式保存在那里

  • git bisect
    搜索删除文件的提交位置

    对分是一种搜索“bug”和/或对存储库所做更改的方法,使用它来跟踪文件何时被删除。您可以编写脚本来搜索文件是否存在,并使用
    git bisect--run…
    标志运行它

  • 获得所需的SHA-1后,使用git revert SHA-1以“撤消”给定提交中所做的更改。为了安全起见,我想你想在一家新的分支机构做这件事

  • 如果只需要文件而不需要其余更改:
    git签出SHA-1——文件路径


  • pathspec问题的解决方案是指定相对于bash正在查看的目录的父目录,而不仅仅是文件名,因为git不一定运行在bash“打开”的同一目录中

    假设git在
    C:/ProgramFiles(x86)/git/

    name@machine ~/path/inside/the/repo/to/the/parent/dir
    $ git checkout megalongshaofthecommitthatdeletedthefile^ -- filename.ext
    
    将查找
    C:/Program文件(x86)/Git/filename.ext

    相反,请运行:

    name@machine ~/path/inside/the/repo/to/the/parent/dir
    $ git checkout megalongshaofthecommitthatdeletedthefile^ -- ../dir/filename.ext
    

    它将查找
    C:/repodir/path/inside/the/repo/to/the/parent/dir/filename.ext

    pathspec问题的解决方案是相对于bash正在查看的目录指定父目录,而不仅仅是文件名,因为git不一定在bash“打开”的同一目录中运行

    假设git在
    C:/ProgramFiles(x86)/git/

    name@machine ~/path/inside/the/repo/to/the/parent/dir
    $ git checkout megalongshaofthecommitthatdeletedthefile^ -- filename.ext
    
    将查找
    C:/Program文件(x86)/Git/filename.ext

    相反,请运行:

    name@machine ~/path/inside/the/repo/to/the/parent/dir
    $ git checkout megalongshaofthecommitthatdeletedthefile^ -- ../dir/filename.ext
    

    它将查找
    C:/repodir/path/inside/the/repo/to/the/parent/dir/filename.ext

    对不起,我不清楚,我已经得到了删除它的提交(及其sha哈希)。我正在尝试使用该文件撤消此提交,git找不到该文件。在该提交中还有我想要的其他更改,我只想为该提交还原此文件的rm。没问题
    git checkout SHA-1--file_path
    -它将从给定的提交中签出文件,但不会,这将签出删除,这就是为什么我运行
    git checkout SHA-1^--file_path
    在删除之前获取文件。但在这一点上,git出现错误,无法找到文件。问题的关键是什么。文件路径应该是什么格式?相对于repo的根,相对于bash所在的目录?完全符合C:\?还有什么吗?对不起,我不清楚,我已经得到了commit(及其sha散列)的删除位置。我正在尝试使用该文件撤消此提交,git找不到该文件。在该提交中还有我想要的其他更改,我只想为该提交还原此文件的rm。没问题
    git checkout SHA-1--file_path
    -它将从给定的提交中签出文件,但不会,这将签出删除,这就是为什么我运行
    git checkout SHA-1^--file_path
    在删除之前获取文件。但在这一点上,git出现错误,无法找到文件。问题的关键是什么。文件路径应该是什么格式?相对于repo的根,相对于bash所在的目录?完全符合C:\?还有别的吗?