【问题标题】:Rebase using egit使用 egit 变基
【发布时间】:2018-07-10 16:57:45
【问题描述】:

我在一个功能分支上,并且我刚刚完成了一个成功的 rebase(团队 > rebase > master),所以我的分支不会离 master 太远。

现在在 Eclipse git 历史记录中,我可以看到我的分支的 5 次提交都在 master 之上,这是预期的结果。

但是项目名称旁边有一些指示符,说[向上箭头] 7 [向下箭头] 5,当我尝试将我的分支推送到远程分支时,它说:“拒绝非快速- forward”(我一个人在这个远程存储库上工作,我只有一个 git 客户端,它是 Eclipse egit)。

有人可以告诉我如何在变基后“非快进”吗?从现在开始我该怎么办?再次“变基”? “拉” ? “合并”?

【问题讨论】:

    标签: git egit


    【解决方案1】:

    这不是快进,因为从原来的位置(远程仍然在的位置)开始前进,无法再到达更新的分支。 Git 提交是不可变的,因此当您变基时会生成一组全新的提交,其中包含与原始提交相同的更改集:

          master & origin/master  feature
                    |                |
                    v                v
     M -- N -- O -- P -- A' -- B' -- C'
           \
            A -- B -- C
                      ^
                      |
                origin/feature
    

    这张图应该很清楚地解释了为什么你不能通过快进从origin/featurefeature

    您可以通过两种方式解决此问题。如果您设置了权限,则可以执行强制推送。这是处理这种情况的最简单的标准方法。在 egit 上,你会这样做

    1. 团队 -> 推送分支
    2. 选择“强制覆盖...”

    (来自EGit on Eclipse: How to git push --force?

    另一种选择是将 master 合并到您的分支中,而不是进行 rebase。这不是干净的历史,但它会用一个合并提交替换你复制的提交,解决你的快速转发问题。图表如下所示:

          master & origin/master
                    |
                    v
     M -- N -- O -- P --
           \             \
            A -- B -- C -- D
                      ^    ^
                      |    |
                      | feature
                origin/feature
    

    如您所见,feature 将处于合并提交中, 可从origin/feature 快速转发。

    更复杂的方法是在服务器上,将feature 重置为master,然后再次从客户端推送。一般来说,这不是一个好主意,但它可以保证推送会快进:

     # On the server:
     git checkout feature
     git reset --hard master
    

    【讨论】:

    • 好的,这是有道理的。我想带有“强制”选项的 git push 将是我最好的举动。现在,使用旧习惯,我已经完成了“git pull”然后“git push”,现在哪里出了问题? (在我的本地历史上,它的显示方式与以前相同)。
    • @特里斯坦。在这种情况下,请随意选择我的答案。
    • 确定是否可以添加此精度(在进行拉推而不是强制推之后有什么问题?)。
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2014-08-05
    相关资源
    最近更新 更多