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
如何显示几次提交前删除的git文件_Git - Fatal编程技术网

如何显示几次提交前删除的git文件

如何显示几次提交前删除的git文件,git,Git,几天前我删除了一个文件,现在我需要它的一部分。 如何显示它以便我可以复制粘贴 我试过这个: git show HEAD~2 -- path/to/file 但我没有得到任何输出。 自动完成不适用于已删除的文件,因此我不能100%确定文件名,但我可以99%确定。您可以在删除文件的位置签出提交(git checkout“old commit hash”),复制所需文件,然后再次签出当前数据(git commit“current commit hash”) 可以通过以下方式查找哈希:git log列

几天前我删除了一个文件,现在我需要它的一部分。
如何显示它以便我可以复制粘贴

我试过这个:

git show HEAD~2 -- path/to/file
但我没有得到任何输出。
自动完成不适用于已删除的文件,因此我不能100%确定文件名,但我可以99%确定。

您可以在删除文件的位置签出提交(
git checkout“old commit hash”
),复制所需文件,然后再次签出当前数据(
git commit“current commit hash”


可以通过以下方式查找哈希:
git log

列出两次提交之间所有更改的文件

 git diff --name-only START_COMMIT..END_COMMIT
使用--name status还将显示与文件一起添加、删除、修改的更改

git diff --name-status START_COMMIT..END_COMMIT

使用gitk。

一种简单的方法是,如果您碰巧使用了gitkgui,只需在终端中简单地运行
gitk
,然后浏览git树列表,在那里可以删除文件


使用CLI方式:

git log --your_file_path 


如果您只想从树中查看已删除的文件,.

您可以使用命令
git whatchanged
查找已删除文件的名称。它显示由以前的提交修改的文件列表。已删除的文件用字母D标记。识别文件名后,要恢复文件名,请键入
git checkout~-
,其中
表示提交的散列,其中您使用指定的
删除了文件


如果只想查看文件,请键入
git show--
。此命令打印指定提交对文件所做的更改(包括删除)。

这将显示特定文件的最后更改:

git log -1 -p -- <file_path>
  • 使用插入符号(
    ^
    )在提交之前签出文件:

    git签出^
    

    • 我想你的问题是:

    • 你删除了一个文件
    • 然后承诺
    • 发生了很多事情
    • 现在需要该文件的信息
    • 如果是这样,你所做的是正确的。但要实现这一目标还需要更多的东西

    • git log--pretty=format:“%h-%an,%ad-->%s”--date=iso

      这将以可读的格式提供带有日期的提交。 假设有100次提交,并且您的提交日期是距离HEAD 30日左右(然后进行一些“最后40次”提交)

    • git log--pretty=format:“%h-%an,%ad-->%s”--date=iso | head-40 | awk'{print$1}'
      如果输出为40次提交,请执行以下操作


    • 读取提交时
      ;do echo-e“\n\n在$commit中提交的文件是:”;git show--pretty=“format:”--name only$commit;完成<
      git cat file-p HEAD~2:path/to/file

      然后我需要先隐藏我所做的更改吗?您可以完成完整的命令列表吗?您可以使用
      git stash
      将它们隐藏起来,或者已经提交(而不是推送)。提交更改后,可以使用
      git commit--amend
      修改提交中的新更改。完整的更改将是:1)
      git添加“更改的文件”
      2)
      git commit
      3)
      git log
      ->找出删除文件的提交和当前文件4)
      git签出“旧提交散列”
      5)复制您需要的FIE 6)
      git checkout“当前提交散列“
      7)使用
      git add files
      git commit--amend
      进行更改并将其修改为当前提交,谢谢,我不知道
      git whatchanged
      ~
      git checkout~-
      中是打字错误吗?我可以不签出就显示文件吗?不确定为什么git show hashid--path/to/file
      显示的是diff而不是完整的文件。还原文件需要tilde。提交散列后的tilde指的是该文件仍在其中的上一次提交。但是,如果您的目标只是查看文件,当然,
      show
      命令就足够了。我补充了答案,谢谢。你用的是Linux还是Windows?如果是windows,您如何访问git(通过UI或命令)?如果命令-参见下面的我的答案,请选择正确答案。这将对其他人有所帮助。
      git log -1 -p -- <file_path>
      
      git rev-list -n 1 HEAD -- <file_path>
      
      git checkout <SHA>^ -- <file_path>