我一直在分支机构工作.我承诺并将其推送到远程存储库.现在,该分支上的一些文件丢失了.希望他们仍然可以在远程分支上使用,所以我试着这样做git pull:
git pull origin feature/my_branch
Run Code Online (Sandbox Code Playgroud)
但是,git说所有都与远程同步:
* branch feature/my_branch -> FETCH_HEAD
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
这怎么可能是最新的?我在本地找不到我丢失的文件,因为那些丢失的文件,我的项目没有编译.同样,我可以在bitbucket上的远程分支的提交历史中看到这些文件.
Dan*_*mes 27
git pull对应于a的序列git fetch然后git merge.因此,如果从本地存储库中删除文件,则执行操作git pull 不会还原它们.
要恢复它们,您需要使用以下命令从远程存储库中签出这些文件:
git checkout <branch name> -- <path/to/file>
Run Code Online (Sandbox Code Playgroud)
<branch name> 可以是本地的或远程的.
git checkout origin/feature/xpto -- example.jsexample.js回到了当地的分支机构git log7bb2154cf23b68feb0a0bbbd95446f2cd8bf3a44dbc04c23b2c6f2dd7bc9b5ef4aef22611a57c3ad
git checkout dbc04c23b2c6f2dd7bc9b5ef4aef22611a57c3adexample.js从上面的提交哈希中
恢复文件git checkout dbc04c23b2c6f2dd7bc9b5ef4aef22611a57c3ad -- example.js 假设你已经正确地描述了问题,@ danielcsgomes的方法应该可以正常工作.
您可以通过运行找出当前提交中的文件,但不在工作目录中git status.例如(-s用于保持输出短路):
$ rm structy.py
$ git status -s
D structy.py
Run Code Online (Sandbox Code Playgroud)
要获得这一个文件:
$ git checkout -- structy.py
Run Code Online (Sandbox Code Playgroud)
它回来了.
有时简单地检查一些其他分支或修订版,然后回到原来的位置,就可以了.例如,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
Run Code Online (Sandbox Code Playgroud)
但这并不总是奏效.它适用于mp.py因为前一个rev(HEAD^)没有它,并且当前的one(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
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,注意"D"在这里处于不同的位置:我"git rm"ed,而不仅仅是"rm"ed,所以我告诉git如果我做了提交,mp.py应该是在新提交中删除,这不仅仅是我删除它的意外).然后我决定,不,这是错的,我希望一切都恢复到HEAD的方式:
$ git reset --hard HEAD
HEAD is now at 523bacb add multiprocessing example
$ git status -s
$
Run Code Online (Sandbox Code Playgroud)
所以,只有reset --hard在你非常肯定的情况下才能使用.
| 归档时间: |
|
| 查看次数: |
24471 次 |
| 最近记录: |