git pull不';我不能从远程恢复丢失的文件
我一直在一家分公司工作。我提交并将其推送到远程存储库。现在该分支上的一些文件丢失了。希望它们仍然可以在远程分支上使用,所以我尝试执行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 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签出--
可以是本地的,也可以是远程的
示例:使用远程存储库
git checkout origin/feature/xpto--example.js
example.js
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-pullgit-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
$