【问题标题】:Git Cannot push to forked repo on githubGit 无法推送到 github 上的分叉仓库
【发布时间】:2012-09-24 14:00:00
【问题描述】:

因此,我在 github 中创建了一个项目,但由于“推送”命令期间出现错误,需要我先执行“拉取”操作,因此我无法将本地更改推送到我的原始仓库。那么问题是“拉”不断覆盖我所有的本地提交。

示例如下:

在 github 上有一个项目 A(remote = 上游),我将它分叉到我自己的项目中(remote = origin)。然后我创建了一个分支“branch_a”,在其中添加了我所有的补丁更改并将这个分支推送到我的远程源仓库。我最终用多个提交搞砸了整个过程,所以我需要将我的提交压缩为一个,以便提交拉取请求以将我的更改发送到项目 A。尝试压缩我的提交并与上游存储库同步如下:

git rebase -i 上游/主控

我看到了 4 个提交并选择了我想要的一个并删除了其他的

git push origin branch_a

收到错误:

! [拒绝] branch_a -> branch_a(非快进) 错误:未能将一些引用推送到“https://github.com/#####/#####.git” 为防止您丢失历史记录,拒绝了非快进更新 在再次推送之前合并远程更改(例如“git pull”)。见 'git push --help' 的'Note about fast-forwards' 部分了解详细信息。

运行拉取命令:

git pull origin branch_a

收到的消息:

  • 分支 branch_a -> FETCH_HEAD 通过递归进行合并。 libpex/安装 | 364 +++++++++++++++++++++++++++++++++++++++++++++++++++ ++++ 1 个文件已更改,364 次插入(+),0 次删除(-) 创建模式 100644 libpex/INSTALL

本地提交被 pull 命令完全覆盖(我尝试删除此文件大约 10 次,但它不断返回)。

所以现在我又回到了 4 次提交,我无法终生将正确的提交推回我的原始仓库。我该怎么办?

【问题讨论】:

    标签: git github


    【解决方案1】:

    如果您想告诉 Git 推送您拥有的内容并覆盖目的地的任何内容(这会破坏历史记录,因此请谨慎使用),然后在您的推送语句中提供 --force

    git push --force origin branch_a
    

    这将导致origin/branch_a 分支更新为指向您本地的branch_a 分支,无论它是否是快进。 任何可从origin/branch_a 访问但不能从本地branch_a 分支或任何其他远程分支访问的提交都将在远程存储库中丢失。

    【讨论】:

    • 谢谢,但是在接受这个答案之前,你能解释一下为什么我需要这样做吗?如果我必须对似乎是例行操作的操作使用“--force”选项,似乎我状态不佳或 Git UI 出现问题。
    • 问题是你在branch_a 上推送了提交,然后以某种方式重写了历史——你改变了branch_a 的过去,所以推送不再是快进。任何时候你 rebase 一个分支,你都会改变它的历史。这就是为什么建议避免重新设置你已经推送到其他地方的分支。您不仅需要强制推送,而且从您的分支分叉的任何人现在都被搞砸了,因为他们为您的分支拥有的历史不再与您拥有的匹配。
    • 好吧,这可能是主项目的开发者定义的流程有问题。他们告诉我要做的是 fork 存储库,进行更改,然后通过一次提交创建一个拉取请求。然后他们给了我关于补丁的反馈,所以我做了一个变基,然后是我的修复,并试图重新提交一个拉取请求,但推送开始失败。我的分叉回购不是问题,因为我一个人在做。但我认为你的解释确实有道理。谢谢。
    • 严格来说,它们不会丢失;他们将成为孤儿。如果您知道提交 id,它们仍然可以恢复到下一个 git gc 完成,您可以使用 git reflog 看到它(您已签出的所有头的历史记录)。显然在 github 上你没有 shell 访问权限,所以这一点没有实际意义。但重要的是要记住,git push -f(或本地的git reset --hard)并不像你想象的那样具有破坏性。
    • 是的,您当然可以从 reflog 中恢复内容。我不是说“这是不可恢复的”,而是“你正在以可能影响其他人的方式改变你的分支的历史。”
    猜你喜欢
    • 2013-07-12
    • 2011-07-26
    • 1970-01-01
    • 2018-07-18
    • 2021-08-22
    • 2017-02-04
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多