Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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/ios/104.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_Git Log - Fatal编程技术网

Git正在丢失单个文件的历史记录/内容

Git正在丢失单个文件的历史记录/内容,git,git-log,Git,Git Log,我在一家小公司工作,我们的Git回购有点混乱。我刚刚做了一次git pull,今天早些时候所做的更改都不见了 当我在主分支上进行HEAD操作时,git log显示了我在其历史中的最后一次提交b94940c63ef965ce45b0d64ccfba4359134d2552 现在,如果我对丢失更改的问题文件执行了git log filename,则不会显示提交(只显示先前的提交) 执行git日志--follow filename,我的提交B94940C63EF965CE45B0D64CCBCFBA4

我在一家小公司工作,我们的Git回购有点混乱。我刚刚做了一次git pull,今天早些时候所做的更改都不见了

当我在主分支上进行HEAD操作时,
git log
显示了我在其历史中的最后一次提交b94940c63ef965ce45b0d64ccfba4359134d2552

现在,如果我对丢失更改的问题文件执行了
git log filename
,则不会显示提交(只显示先前的提交)

执行git日志--follow filename,我的提交B94940C63EF965CE45B0D64CCBCFBA4359134D2552显示为最新的

如果我这样做了,那就足够了:

git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename
然后会显示提交,并且我的更改会显示在文件中

换句话说,我所做的提交将显示在分支历史记录中(阻止分支合并),但是单个修改的文件在其历史记录中没有该提交!(除非我明确签出该提交)

问题:

  • 这到底是怎么发生的

  • 我怎么修理它?(我们的回购协议中存在多个文件的问题)


  • 首先,您应该掌握Git命令的作用以及存储在存储库中的数据

    • 获取一个历史可视化工具,如或Gitk,以查看您的提交历史,并查看提交基于什么提交

    • 做两件事:它从远程存储库检索新提交,并将远程存储库的头与当前头(在当前分支中)合并

    因此,考虑到这一点,你以后可能需要更加小心。您可以执行
    git fetch
    并手动合并需要合并的内容,而不是使用
    git pull
    。这样,您就可以控制正在进行的编辑


    至于你目前的情况,我不认为Git正在丢失数据。你说你的档案还在历史上。因此,现在您可能需要进行一些创造性的重置(恢复到旧版本)或修补程序(可能手动),以使项目文件达到您希望的状态。

    这应该只是一个注释,但很难阅读。签出master后:

    git checkout master
    
    它的输出是什么

    git status
    


    好的,我把问题解决了。当一个同事拉车时,他遇到了一些冲突。他没有解决问题,而是重置了每个暂存文件。这类似于对单个旧文件执行git签出旧版本。因此,在主文件的前面提到了一些旧版本的文件

    现在我正在手动修复他炸掉的东西


    故事的寓意:在单个文件上修改git操作(签出、重置等)是非常危险的。

    您可以在您想要查看哪些文件可能丢失提交的文件夹中实际使用此bash脚本:

    #/bin/zsh
    对于f,单位为$(查找。-name'*.php')
    做
    follow=$(git log--oneline-1--pretty=format:“%h”---$f)
    log=$(git log--follow--oneline-1--pretty=格式:“%h”---$f)
    如果[$log!=$follow];然后
    echo“follow$follow,log$log=>f”
    fi
    
    完成
    感谢您对Giggle和Gitk的建议。它们很有用,但只是告诉我控制台显示的相同信息;分支具有正确的历史记录-文件没有。不知何故,这些文件的版本是错误的。幸运的是,没有数据丢失,因此我可以进行重置。但我只是担心其他事情正在发生(事情很快就会再次破裂),这就是为什么我想知道事情是如何发展到这种地步的。给未来的评论者注意:whatchanged从git日志中得到了不同的结果——下面这不是真正的道德。其寓意是:“学会解决合并冲突”。这适用于任何风投,而且根据围绕它的问题有多少,这似乎是开发人员中最不熟练的技能。非常同意,@Ryan,而且问题往往会因为人们“手动恢复他吹出的东西”而延长而不是恢复更改并让他正确地进行合并。
    git whatchanged -m -p <path>
    
    git log --graph --oneline b94940c63ef965ce45b0d64ccfba4359134d2552..master