我正在尝试重现我尝试回答this question而导致的问题。
简而言之
github用户尝试执行git pull --rebase
并删除了该用户的本地文件。我试图在github上重新创建这个场景,但在我的情况下,没有任何内容被删除。
那么如何重现git pull具有破坏性的场景呢?
详情
第1部分:
git push
失败,因为用户没有远程更改(按预期方式)。git pull --rebase
,然后再解析,然后再次git push
。第2部分:
在本地,我做了:
在本地初始化回购
> mkdir myrepo
> cd myrepo
> echo AAAAA > fileA.txt
> echo BBBBB > fileB.txt
> echo ignoreme > .gitignore
> git init
在本地提交文件
> git add .
> git commit -m"initial commit"
尝试拉远程更改
> git remote add origin https://github.com/user/myrepo.git
> git branch --set-upstream-to=origin/master master
> git pull --rebase
结果是(如预期的那样):
First, rewinding head to replay your work on top of it...
Applying: initial commit
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging .gitignore
CONFLICT (add/add): Merge conflict in .gitignore
error: Failed to merge in the changes.
Patch failed at 0001 initial commit
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
此时,如果我ls
,我的本地文件仍然在我的文件系统上。
> ls -a
. .. .git .gitignore README.md fileA.txt fileB.txt
更新
以下是有问题的原始用户发表的评论。
来自user7342807的:
...今天早上我安装了wordpress并完成了这个。
git init git add . git commit -m "initial commit"
此时,我意识到我已经创建了github页面 它,默认自述文件。
所以,不知道这将是一个问题,我试图推动
git remote add origin http://github.com/user/repo.git git push -u origin master
这是我收到消息的时候:
$ git push -u origin master To https://github.com/user/project.com ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/user/project.com' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
所以,我没有强行推送和擦除github上的README文件 做了
git pull --rebase
并且git向我展示了这条消息First, rewinding head to replay your work on top of it...
在我
ctrl+C
退出流程之前,我等了大约5分钟 意识到从wordpress网站上删除了大约8-9个文件。git status
还向我显示了已删除的文件。我能够使用显示我的
恢复了我的文件git reflog
恢复这些文件 我第一次提交HEAD @ 1并使用git reset --hard "HEAD@{5}"
什么原因导致文件从其他用户的本地文件系统中删除?
请注意,有一个similar question会询问如何在发生这种情况时取消删除文件。所以这种情况发生了,人们正在丢失文件。
答案 0 :(得分:0)
由于回购率低,我无法发表评论,但今天早上我安装了wordpress,并且做到了这一点。
git init
git add .
git commit -m "initial commit"
此时,我已经意识到我已经为它创建了github页面,其中包含一个默认的自述文件。
所以,不知道这将是一个问题,我试图推动
git remote add origin http://github.com/user/repo.git
git push -u origin master
这是我收到消息的时候:
$ git push -u origin master
To https://github.com/user/project.com
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/user/project.com'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
因此,我没有强行推送和删除github上的README文件,而是git pull --rebase
并且git向我显示了此消息
First, rewinding head to replay your work on top of it...
在我ctrl+C
退出流程之前,我等了大约5分钟,并意识到从wordpress网站上删除了大约8-9个文件。 git status
还向我显示了已删除的文件。
我能够使用git reflog
恢复这些文件,这显示了我在HEAD @ 1上的第一次提交,并使用git reset --hard "HEAD@{5}"
答案 1 :(得分:0)
git pull
将删除其他路径上曾经跟踪的文件。
参阅Why git rm --cached not remove local ever tracked file but others