什么会让 git 在 git pull --rebase 期间删除本地文件?

2023-12-04

我正在尝试重现我尝试回答所导致的问题这个问题.

In short

github 用户尝试这样做git pull --rebase并且该用户的本地文件已被删除。我尝试在 github 上重新创建这个场景,但在我的例子中没有删除任何内容。

那么如何重现 git pull 具有破坏性的场景呢?

细节

Part 1:

  • 用户询问如何将本地更改同步到新创建的远程存储库。
  • git push失败,因为用户没有远程更改(如预期)。
  • 我建议使用git pull --rebase,然后求解,然后git push again.
  • 但我的建议导致用户的本地文件被删除。 (看原问题)
  • 请注意,文件已被跟踪(在本地提交),因此用户能够恢复它们。

Part 2:

  • 我创建了一个名为 https://github.com/user/myrepo 的存储库,使用 README 和 .gitignore 进行初始化
  • 在本地,我做了:

    本地初始化存储库

    > 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
    

Update:

这是遇到问题的原始用户的评论。

来自用户7342807:

...我今天早上安装了 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 --rebasegit 向我展示了这条消息

First, rewinding head to replay your work on top of it...

我等了大约5分钟,才ctrl+C过程之外,并且 意识到大约有 8-9 个文件从 WordPress 站点中删除。git status还向我展示了删除的文件。

我能够使用恢复这些文件git reflog这向我展示了 我在 HEAD@1 上的第一次提交,并使用以下命令恢复了我的文件git reset --hard "HEAD@{5}"


是什么导致文件从其他用户的本地文件系统中删除?

请注意,有一个类似的问题询问发生这种情况时如何取消删除文件。所以这种情况发生了,人们正在丢失他们的文件。


git pull将删除另一个路径上曾经跟踪的文件。

参考为什么 git rm --cached 不删除本地曾经跟踪的文件而是其他文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么会让 git 在 git pull --rebase 期间删除本地文件? 的相关文章

  • 当出现错误时如何删除远程分支?

    我尝试过以下命令 但失败了 git push origin next remote error denying ref deletion for refs heads next To blah git remote rejected nex
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • Visual Studio Code 内置故事,用于查看 git 提交历史记录并对其内容进行比较

    In this https stackoverflow com questions 37899765 how can i view the git history in visual studio code 60013101 noredir
  • 在 Web 应用程序中显示最新的提交值?

    我有一些 Rails 应用程序 我使用 Git 作为版本控制系统 我使用 GitHub 或 Beanstalk 作为存储库主机 从理论上讲 我想要做的事情非常简单 以某种方式在 Web 应用程序的页脚中显示最新的提交 ID 号 哈希值 这样
  • gitlab 请求将分支 A 合并到开发中(落后 3 次提交)我应该担心吗?

    在 gitlab 中创建合并请求时 我经常收到一条消息 请求将分支 A 合并到开发中 x 提交落后 gitlab想告诉我什么 我应该担心还是需要修复某些东西 什么 一段时间后合并请求在项目中打开时 由于其他人合并了自己的更改 您尝试合并到的
  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire
  • 如何生成类似github的影响图?

    是否有一些程序 或者我错过的一些神奇的 git 插件 可以从 git 存储库获取影响图或类似的东西 而无需通过 github 就数据收集而言 我可以生成图表 我不确定从哪里开始编写自己的代码 我假设有一些标志我可以传递给 git log 来
  • 执行 git Push 时出现“diff.renamelimit 变量”警告

    我将本地提交推送到远程 git 服务器并收到以下警告消息 remote warning only found copies from modified paths due to too many files remote warning y
  • 在 Windows 上使用 Git - 意外丢失了大量工作。我可以拿回来吗?

    我很困惑 我想我已经失去了几个小时的工作时间 我之前在 Git 中编辑了一个文件 我保存了它 但没有提交 我确实做了一些其他文件更改 并提交并推送了它们 然而 有一个文件被搞乱了 所以我单击了最后一次成功的提交 然后按了 回滚到此提交 令我
  • Spring Cloud Config - 不允许使用 git-upload-pack

    我有一个在 docker 环境中运行的 spring boot 应用程序 它连接到 Git 存储库以获取应用程序的配置 我的问题是 当尝试获取 properties 文件时 应用程序有时会出错 这很奇怪 因为如果我更改用户和密码 同一个应用
  • 为别名命令添加“git help”?

    我已经实现了一个 Git 命令并使用 git 别名将其连接到 Git 但是有没有办法连接 Git 帮助 我在 Windows 上运行 如果我发出git help mycmd我收到一个弹出窗口 告诉我 Git 找不到 git mycmnd h
  • 使用 TFS REST API 获取 Git 提交的最新关联工作项

    我正在尝试获取关联的工作项使用 TFS REST API 进行 GIT 提交 https www visualstudio com en us docs integrate api git commits 我的请求 URL 如下所示 htt
  • http.h:6:23: 致命错误:curl/curl.h:没有该文件/目录

    我在 CentOS 7 中下载 git 包 wget https www kernel org pub software scm git git 2 0 1 tar gz tar xzf git 2 0 1 tar gz 当我编译git时
  • 如何恢复已删除的远程分支

    我们的远程主分支被删除 我有主存储库的本地副本 但它已经过时了 我可以通过将最后一个已知的提交哈希值插入 URL 来查看 github 中的分支 但未能成功恢复它 我尝试了几个步骤来恢复它 git reset hard 16deddc05c
  • Git 中的数据完整性?

    我现在已经多次听到提到 Git 提供数据完整性 但是 这是什么意思 据我所知 git 中的所有对象都是使用 SHA 1 校验和来访问的 并且该校验和是根据文件的内容计算的 这意味着如果文件发生更改 您将得到不同的校验和 但这如何提供数据完整
  • GitPython 检查 git pull 是否更改了本地文件

    使用 GitPython 我只想在拉取后本地文件发生更改时才调用函数 例如 如果我在一台单独的计算机上进行推送 然后拉第一台计算机 它按预期工作 但不提供任何输出 理想的输出是已更改的文件列表 或者只是告诉我拉动是否有错误 没有拉动 因为分
  • 为什么cherry-pick 告诉我所有行都已更改?

    Updated 考虑文件 abc 在提交 A 和 B 中都相同 begin 123 456 789 klm end 在A中 我们重构第一行123 gt AAA并在结果之上选择 B Git 告诉我们all lines in the file
  • 合并后 Git 分支和提交历史记录

    我正在开发一个项目 单独 对于我开发的每个功能 我都会创建一个新分支 处理该功能 然后将其合并到 master 中 所以通常我不会同时在两个不同的分支上工作 也不会在一个分支上工作时接触master 当我合并一个分支时 我看到 使用gitx
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我

随机推荐