【问题标题】:error: The branch 'upgrading' is not fully merged错误:分支“升级”未完全合并
【发布时间】:2019-08-21 20:20:53
【问题描述】:

我最近将我的应用程序从 Bitbucket 和 checkout 克隆到一个新的 upgrading 分支,在那里我将我的应用程序从 rails 5.0.0.1 升级到 rails 5.1.6:

$ git checkout -b upgrading

我首先更新了我的 Gemfile,我运行了包更新:

$ bundle update

railsdiff 网站和为此目的创建的新 rails 5.1.6 应用程序,我编辑了旧应用程序添加或删除代码以及删除或创建文件,并编辑了指定类版本的迁移文件继承自。然后我在运行 rails app:update 之前使用 git 提交了我的应用程序:

$ git add -A
$ git commit -m 'before rails app update'
$ rails app:update

要做的更改很少,然后我重置了我的数据库并运行了我的整个测试套件:

$ rails db:migrate:reset
$ rails test

我为数据库播种,启动服务器并以图形方式测试应用程序。一切都很好。最后我做了一个commit,切换到master分支,squash合并了升级分支,最后做了最后一个commit:

$ git add -A
$ git commit -m "work in progress"
$ git checkout master 
$ git merge --squash upgrading
$ git commit -m "upgrade to Rails 5.1.6"
$ git push

一切都很好,除了我试图删除upgrading 分支时,因为操作失败:

$ git branch -d upgrading
error: The branch 'upgrading' is not fully merged.
If you are sure you want to delete it, run 'git branch -D upgrading'.

我只知道很少的 git 基本命令,所以我不知道为什么会这样。我将不胜感激。

【问题讨论】:

    标签: ruby-on-rails git


    【解决方案1】:

    如果可以的话,不要太担心。

    git branch -d 是“害羞”的删除模式,对于任何可能可能丢失的东西都非常谨慎。通过您描述的操作,不会丢失任何工作,因为所有分支的提交现在都在您的 master 上(即使它们被压扁了)。

    话虽如此,分支并不是一个很大的负担,保留它以“以防万一”以供以后使用的成本(因为您压缩了提交并且可能希望在以后检查各个步骤以解决错误)是磁盘空间可能非常低。

    您也可以在分支的尖端放置一个标签*,删除分支**,然后您将获得这些未压缩的提交以供进一步检查(再次说明磁盘空间成本,但可能更清楚如果你想让你的分支列表中没有任何已完成的工作)。

    * 与git tag before-the-squash upgrading
    ** 与git branch -D upgrading

    【讨论】:

    • 据你所知,有没有办法让 git 报告未合并的内容?如果 git 说分支未完全合并,则表示某些内容未合并。你会重新合并同一个分支吗?
    • @Asarluhi 不,我不会,如果你尝试它会以空合并结束,因为代码库现在在两个分支上都是相似的。检测发生在提交级别,并且由于您压缩了提交,因此它们不会在 master 上显示。
    • 在删除之前“将标签放在分支的尖端”是什么意思?不过,应该有办法让 git 报告在 master 分支中合并升级分支期间丢失的内容。
    • @Asarluhi 在文件内容方面没有“丢失”。 git branch -d 检测到的作为“警告:可能丢失”的标志是比较从任一点可到达的提交。 this 已经改变,尽管它在内容方面无关紧要。我知道一开始这很麻烦,但要说服你的分支:没有差异。
    • @Asarluhi 关于标记过程:只是git tag before-the-squash upgrading(我在上面编辑过)
    【解决方案2】:

    问题是您将upgrading 分支与--squash 合并到master 中。压缩upgrading 分支上的提交会给你留下一个新的sha 用于提交。由于这个新的sha,git 无法检测到这个分支与 master 合并,并认为它不是。您可以将您的upgrading 分支重新设置为全部为 1 次提交,然后将其合并到 master 而不使用 squash。

    这将导致单个提交仍然合并到 master,除了 git 会知道分支确实被合并了,因为分支的 sha 实际上在 master 的历史记录中,它不会有问题你试图删除upgrading 分支。

    如果你 100% 确定 master 确实有来自 upgrading 分支的更改,那么只需使用 git branch -D upgrading 告诉 git 你确实确定要删除该分支。

    如果您希望在合并之前使您的 upgrading 分支与 master 同步,并在此过程中将提交压缩为一个,您可以这样做:

    git rebase -i master
    

    然后你可以选择你想要的提交。您可以压缩、挑选、修复等。这将为您留下一个整洁的 upgrading 分支,可以毫无问题地合并到 master 中。

    【讨论】:

    • 能否请您添加代码以重新定位我的升级分支?
    【解决方案3】:

    Git 正试图保护你不丢失你所做的一切...... Git 检测到你没有合并你在这个分支上所做的工作(升级)

    但是,正如您所说,您想删除,因为该过程失败。因此,这意味着您确定要删除它,并放弃您在那里所做的一切。

    对于这个 git 也说明了如何去做。运行:

    git 分支 -D 升级

    • 大写 D

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多