错误:分支“升级”未完全合并

时间:2019-03-31 14:42:06

标签: ruby-on-rails git

我最近从Bitbucket克隆了我的应用程序,并签出到了一个新的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

我为数据库设置了种子,启动了服务器并以图形方式测试了应用程序。一切都很好。最后,我提交了一个内容,切换到master分支,壁球合并了升级分支,最后做出了最后一个提交:

$ 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基本命令,所以我不知道为什么会这样。我将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

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

话虽这么说,分支并不是一个很大的负担,保持分支“以防万一”以备后用(因为您压缩了提交并且以后可能想检查各个步骤以解决错误)的代价是磁盘空间可能很低。

您还可以在分支的顶端放置标签*,删除分支**,然后您将获得这些未压缩的提交以进行进一步检查(这再次表明了磁盘空间成本,但是也许更清晰)如果您希望分支机构列表中没有任何已完成的工作)。

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

答案 1 :(得分:1)

Git试图保护您避免丢失您所做的一切... Git检测到您没有合并在此分支上所做的工作(升级)

但是,正如您所说,您要删除,因为该过程失败了。因此,这意味着您确定要删除它,并删除在那里所做的所有操作。

为此,git还说了如何做。只需运行:

  

git branch -D升级

  • 大写D

答案 2 :(得分:1)

问题是您将upgrading分支与--squash合并为master分支。压缩upgrading分支上的提交会为您留下一个新的sha来进行提交。由于有了这个新的sha,git无法检测到该分支已与master合并,并且认为不是。您可以可以将您的upgrading分支重新设置为全部为1个提交,然后将其合并为母版,而无需压榨。

这将导致单个提交被合并到master主机中,除非git会意识到以下事实:该分支确实已合并,因为分支的sha实际上在master的历史中,并且不会您尝试删除upgrading分支时遇到的问题。

如果您100%确定master确实从upgrading分支进行了更改,则只需使用git branch -D upgrading告诉git,您确实确定要删除该分支。

如果您希望在合并之前使upgrading分支与master同步,并且在此过程中将提交压缩为1,则可以执行以下操作:

git rebase -i master

然后您可以选择要提交的内容。您可以挤压,拾取,修复等。这将为您提供一个整洁的upgrading分支,可以毫无问题地合并到master中。