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

Asa*_*uhi 2 git ruby-on-rails

我最近从 Bitbucket 克隆了我的应用程序并签出到一个新upgrading分支,在该分支中我将应用程序从 Rails 5.0.0.1 升级到了 Rails 5.1.6:

$ git checkout -b upgrading
Run Code Online (Sandbox Code Playgroud)

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

$ bundle update
Run Code Online (Sandbox Code Playgroud)

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

$ git add -A
$ git commit -m 'before rails app update'
$ rails app:update
Run Code Online (Sandbox Code Playgroud)

需要进行一些更改,然后我重置数据库并运行整个测试套件:

$ rails db:migrate:reset
$ rails test
Run Code Online (Sandbox Code Playgroud)

我播种了数据库,启动了服务器并以图形方式测试了应用程序。一切都很好。最后我做了一次提交,切换到主分支,挤压合并了升级分支,最后进行了最后一次提交:

$ 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
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了当我尝试删除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'.
Run Code Online (Sandbox Code Playgroud)

我只知道很少的 git 基本命令,所以我不知道为什么会发生这种情况。我将不胜感激任何帮助。

Nat*_*ate 6

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

\n\n

这将导致单个提交仍然被合并到 master,除非 git 会意识到该分支确实被合并,因为分支 \xe2\x80\x99ssha实际上位于 master\xe2\x80\x99s 历史记录中,并且它尝试删除分支时不会\xe2\x80\x99t 遇到问题upgrading

\n\n

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

\n\n

如果您\xe2\x80\x99想带上您的upgrading分支与master同步,并在此过程中将提交压缩为一次,您可以执行以下操作:

\n\n
git rebase -i master\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n