【问题标题】:Egit rejected non-fast-forwardEgit拒绝非快进
【发布时间】:2023-03-08 23:09:01
【问题描述】:

我在推送到 github 存储库时收到此消息。你能告诉我一步一步的过程来解决它吗?我只推了一次就成功了。但是,当我更新一个项目并尝试推送我的第二次提交时,它显示“主人拒绝非快进”并且不允许我推送。请说明过程。

【问题讨论】:

  • 在使用“使用自述文件初始化此存储库”创建新存储库后,我遇到了同样的问题。我删除了那个并在没有这个复选框的情况下再次创建了一个。
  • @andrew 是对的

标签: eclipse github egit


【解决方案1】:

我遇到了同样的问题,我能够解决它。 afk5min 是对的,问题是您从中提取代码的分支已经在远程存储库上发生了变化。根据标准 git 实践(http://git-scm.com/book/en/Git-Basics-Working-with-Remotes),您需要(现在)将远程存储库中的这些更改合并到本地更改中,然后才能提交。这是有道理的,这会迫使您接受其他人的更改并将它们合并到您的代码中,从而确保您的代码在其他更改到位的情况下继续运行。

不管怎样,开始吧。

  1. 配置 'fetch' 以获取您最初从中提取的分支。

  2. 获取远程分支。

  3. 将该远程分支合并到本地分支。

  4. 在本地存储库中提交(合并)更改。

  5. 将更改推送到远程仓库。

详细...

  1. 在 Eclipse 中,打开视图“Git Repositories”。

  2. 确保您看到本地存储库,并且可以将远程存储库视为子文件夹。在我的版本中,它被称为 Remotes,然后我可以在其中看到远程项目。

  3. 寻找指向左侧的绿色箭头,这是“获取”箭头。右键单击并选择“配置提取”。

  4. 您应该会看到 URI,确保它指向远程存储库。

  5. 查看弹出窗口的参考映射部分。我的是空的。这将指示您要获取哪些远程引用。点击“添加”。

  6. 输入您需要从远程存储库获取的分支名称。我的是“大师”(顺便说一句,这里的下拉菜单会很棒!!,现在,你必须输入它)。继续弹出窗口,最终点击“完成”。

  7. 单击“保存并获取”。这将获取该远程引用。

  8. 查看本地存储库的“分支”文件夹。您现在应该在远程文件夹中看到该远程分支。再次,我看到了“主人”。

  9. 右键单击'Branches'的'Local'文件夹中的本地分支,命名为'master'。选择“Merge”,然后选择名为“origin/master”的远程分支。

  10. 通过合并处理。

  11. 将任何更改提交到本地存储库。

  12. 将您的更改推送到远程存储库。

  13. 去喝杯可口的饮料,祝贺你自己。休息一天。

【讨论】:

  • 这应该被标记为答案。像魅力一样工作。即使我在 GitHub 上为我在 Eclipse 中的项目创建存储库时没有添加任何文件(通常的 README 文件),也会出现此问题。非常感谢您提供易于遵循的分步说明。
  • 这个问题花了我一年的时间才解决,直到我读到你的帖子。就我而言,我没有遥控器,但 Eclipse 创建了一个名为“origin”的默认遥控器。
  • 太好了,我终于可以与 Eclipse 合并了。这里的关键是使用 Git Repositories 视图进行合并,而不是通常的 Team Synchronize 视图。如果在团队同步视图中 eGit 可以禁用所有不执行任何操作的选项,那就太好了。
  • 虽然这确实有效,但它会创建不必要的合并提交。您应该在这里使用 rebase,这很好,因为您的更改只是本地的,因此您不会更改任何已发布的历史记录(如果您这样做了,git 无论如何都会对您大喊大叫)。我喜欢 MYN 的回答。
  • 右键单击项目,然后在 master 中单击 Merge,然后再次右键单击项目 push branch Master 工作
【解决方案2】:

在我的例子中,我在推送时选择了Force Update 复选框。它就像一个魅力。

【讨论】:

  • 这对我也有用。在“修改”提交后,我有了 OP 的条件。并且 fetch 给了我“没有什么可取的”
【解决方案3】:

与此同时(在您更新项目时),已对“主”分支进行了其他提交。因此,您必须先拉取这些更改才能推送您的更改。

【讨论】:

  • 在这种情况下 git 非常愚蠢,我将所有更改推送到远程。我是该项目中唯一的工作人员。为什么我需要先拉遥控器才能再次推????拉取的更改最初来自我的本地
【解决方案4】:

适用于 Eclipse Luna + Eclipse Git 3.6.1

我,

  1. 克隆的 git 存储库
  2. 对源代码进行了一些更改
  3. Git 暂存视图中的暂存更改
  4. 最后,提交并推送!

我在使用 EGit 时遇到了这个问题,这就是我修复它的方法..

是的,有人在我提交更改之前提交了更改。所以更改被拒绝。 在此错误之后,更改实际上已提交到本地存储库。 我不想只是 Pull 进行更改,因为我想维护 linear history 中指出的 - In what cases could `git pull` be harmful?

所以,我执行了以下步骤

  1. 从 Git 存储库的角度,右键单击相关的 Git
    项目
  2. 选择Fetch from Upstream - 它获取远程更新(引用和对象),但不进行本地更新。欲了解更多信息,请参阅What is the difference between 'git pull' and 'git fetch'?
  3. 选择Rebase... - 这会打开一个弹出窗口,点击Preserve merges during rebase 看看为什么
    What exactly does git's "rebase --preserve-merges" do (and why?)
  4. 点击Rebase button
  5. 如果有conflict(s),则转到第6步否则第11步
  6. 会出现Rebase Result 弹出窗口,只需单击OK
  7. file comparator 会打开,你需要修改left side file
  8. 正确合并更改后,转到 Git Staging 视图
  9. stage the changes。即add to index
  10. 在同一视图上,单击Rebase-> Continue。重复 7 到 10 次,直到解决所有冲突。
  11. History 视图中,选择您的提交行并选择Push Commit
  12. 选中Rebase Commits of local.......复选框并单击下一步。参考原因 - Git: rebase onto development branch from upstream
  13. 点击Finish

注意:如果您有多个本地存储库提交,则需要在一次提交中压缩它们以避免多次合并。

【讨论】:

  • 我同意使用变基而不是合并。这样做更好,因为它不会创建不必要的合并提交。 (题外话:Stack Overflow 完全荒谬,仅基于我最初写“+1 for”这一事实拒绝我的评论。我的评论非常有建设性,谢谢。)
【解决方案5】:

Configure 在收到拒绝消息时推送代码后,单击配置并单击添加规范,如图所示

下拉并单击 ref/heads/yourbranchname 并再次单击 Add Spec

确保选择强制更新

最后保存并推送代码到repo

【讨论】:

    【解决方案6】:

    打开 git 视图:

    1- 选择您的项目并选择合并 2-选择远程跟踪 3-点击确定

    Git 会将远程分支与本地仓库合并

    4-然后推

    【讨论】:

      【解决方案7】:

      这个错误意味着远程仓库有其他提交并且已经领先于你的本地分支。
      我尝试做一个 git pull,然后是一个 git push。如果它们没有冲突更改,则 git pull 将最新代码获取到我的本地分支,同时保持我的更改完好无损。
      然后 git push 将我的更改推送到 master 分支。

      【讨论】:

      • 似乎很多人都错过了这个简单的解决方案:D
      【解决方案8】:

      我发现你必须是最新的 git 提交。 因此,这些是要采取的步骤: 1) 确保您没有处理相同的文件,否则您将遇到 DITY_WORK_TREE 错误。 2) 拉取最新的变化。 3) 提交您的更新。

      希望这会有所帮助。

      【讨论】:

        【解决方案9】:

        就我而言,我忘了从 git 中提取新的更改

        1. 右击项目Fetch From Upstream
        2. 右键项目Pull
        3. 右键项目Push to Upstream

        【讨论】:

          【解决方案10】:
          1. 进入 Github 并为您的新代码创建一个 repo。
          2. 在向上游推送时,请在 Eclise 中使用新的 https 或 ssh url;

          【讨论】:

            猜你喜欢
            • 2016-06-29
            • 2012-07-26
            • 1970-01-01
            • 2013-12-26
            • 1970-01-01
            • 1970-01-01
            • 2011-11-01
            • 2014-03-28
            • 1970-01-01
            相关资源
            最近更新 更多