git pull不';我不能从远程恢复丢失的文件

git pull不';我不能从远程恢复丢失的文件,git,Git,我一直在一家分公司工作。我提交并将其推送到远程存储库。现在该分支上的一些文件丢失了。希望它们仍然可以在远程分支上使用,所以我尝试执行git pull: git pull origin feature/my_branch 然而,git表示,所有这些都与远程同步: * branch feature/my_branch -> FETCH_HEAD Already up-to-date. 这怎么可能是最新的?我在本地找不到丢失的文件,由于这些丢失的文件,我的项目无法编译

我一直在一家分公司工作。我提交并将其推送到远程存储库。现在该分支上的一些文件丢失了。希望它们仍然可以在远程分支上使用,所以我尝试执行git pull:

git pull origin feature/my_branch
然而,git表示,所有这些都与远程同步:

 * branch            feature/my_branch -> FETCH_HEAD
Already up-to-date.

这怎么可能是最新的?我在本地找不到丢失的文件,由于这些丢失的文件,我的项目无法编译。同样,我可以在bitbucket上远程分支的提交历史记录中看到这些文件。

git pull
对应于
git fetch
然后
git merge
的顺序。因此,如果您从本地存储库中删除这些文件,那么执行git pull将不会恢复它们

要恢复这些文件,您需要使用以下方法从远程存储库签出这些文件:

git checkout <branch name> -- <path/to/file>
git签出--
可以是本地的,也可以是远程的

示例:使用远程存储库
  • 远程上游名称:原点
  • 远程分支:功能/xpto
  • 本地分支机构:功能/xpto
  • 本地分支上缺少文件:example.js
  • 将文件从远程分支恢复到本地分支:
    git checkout origin/feature/xpto--example.js
  • 现在您的本地分支上又有了
    example.js
  • 示例2:回滚提交
  • git日志
  • 当前提交哈希
    7bb2154cf23b68feb0a0bbbd95446f2cd8bf3a44
  • 要回滚到此提交哈希
    DBC04C23B2C6F2DD7BC9B5EF4AEF2261A57C3AD
    • git签出dbc04c23b2c6f2dd7bc9b5ef4aef22611a57c3ad
  • 只想从上面的提交散列恢复文件
    example.js
    • git签出dbc04c23b2c6f2dd7bc9b5ef4aef22611a57c3ad--example.js

  • 假设您正确地描述了问题,@danielcsgomes的方法应该可以正常工作

    通过运行
    git status
    ,可以找出哪些文件在当前提交中,而不是在工作目录中。例如(使用
    -s
    保持输出简短):

    要仅取回该文件,请执行以下操作:

    $ git checkout -- structy.py
    
    它回来了

    有时候,简单地查看其他分支或修订版,然后回到原来的位置,就可以了。例如,
    master
    上最近的提交是添加
    mp.py
    ,因此如果我这样做:

    $ rm mp.py
    $ git status -s
     D mp.py
    $ git checkout HEAD^
    Note: checking out 'HEAD^'.
    [verbiage about detached HEAD etc, snipped]
    $ git checkout master
    Previous HEAD position was 171ce6f... ignore *.log files
    Switched to branch 'master'
    $ git status -s
    $ head -1 mp.py
    from multiprocessing import Process, Queue
    
    但这并不总是有效的。它适用于
    mp.py
    ,因为上一版本(
    HEAD^
    )没有它,而当前版本(
    master
    )有它,所以从
    HEAD^
    向前移动到
    master
    会恢复文件。但是文件
    structy.py
    已经存在了很长一段时间,因此如果我删除它并签出
    HEAD^
    或其他分支或其他任何东西,它仍然会从工作目录中删除。因此,像
    git checkout--structy.py
    这样的东西是一种更容易恢复它的方法,除非您想使用非常大的锤子:
    git reset--hard

    如果确定要放弃所做的任何更改,可以
    git reset--hard HEAD
    。例如,考虑:

    $ git rm mp.py
    rm 'mp.py'
    $ git status -s
    D  mp.py
    
    (顺便说一句,注意“D”在这里的位置不同:I“git rm”ed,而不仅仅是“rm”ed,所以我告诉git,如果我做了一个提交,mp.py应该在新的提交中被删除,我删除它不仅仅是一个意外)。然后我决定,不,这是错误的,我希望一切回到它在头脑中的样子:

    $ git reset --hard HEAD
    HEAD is now at 523bacb add multiprocessing example
    $ git status -s
    $ 
    

    因此,如果您非常确定,请仅使用
    reset--hard

    它们仍在存储库中吗?仅仅因为文件仍在远程设备的文件系统中,并不意味着它们存在于存储库中。如果您需要取回文件,只需签出仍保留这些文件的提交,然后读取文件并提交新结果。嗨,艾伦,签出提交是什么意思
    git log
    显示分支上的所有提交,我重置为提交,我以为它包含文件,但它没有?你能在回答中详细说明吗?Thanx.文件是否首先添加到存储库中?git reset--硬拉&git-pull
    git-checkout
    将移动到该分支,而不是从远程还原它。
    git-checkout
    与远程或本地分支一起工作,可以获取特定文件/路径或整个分支。如果要在本地存储库中回滚提交,只需执行以下操作:
    git checkout
    git日志中执行。请参阅手册:如果我想要获取所有远程分支,该怎么办?Malloc:如果您想要获取整个分支,只需执行
    git checkout
    ,而不使用
    --
    路径/文件
    尝试一个简单的测试,将远程分支签出到新的本地分支:
    git checkout remote/branch-b local_branch
    ,现在查看本地系统上是否有这些文件。
    $ git reset --hard HEAD
    HEAD is now at 523bacb add multiprocessing example
    $ git status -s
    $