下面是我从主分支中使用的命令

git branch experiment
git checkout experiment

然后我对我的文件做了一些更改,提交这些更改,并将新的分支推送到GitHub。

git commit . -m 'changed files'
git push -u origin experiment

后来,我决定将我的实验分支合并到主分支中。

git checkout master
git merge experiment

最后,我把这些改动推到了GitHub上。

git push -u origin master

一切都很顺利,直到我试图删除我的实验分支使用

git branch -d experiment

我得到了错误信息:

错误:分支'experiment'没有完全合并。 如果你确定要删除它,运行'git branch -D experiment'。

我对git有点陌生,我不知道我还能合并多少两个分支。我错过了什么?


当前回答

我相信旗力才是你真正想要的。使用git branch -d——force <branch_name>强制删除分支即可。

其他回答

我相信旗力才是你真正想要的。使用git branch -d——force <branch_name>强制删除分支即可。

如果你在Github上做了合并,看到下面的错误。在远程服务器识别本地的合并之前,您需要从远程服务器提取(获取并提交)更改。完成此操作后,Git将允许您删除分支,而不会提示错误。

错误:分支'x'没有完全合并。 如果你确定要删除它,运行'git branch -D 'x'。

我的本地git上没有上游分支。我已经从master创建了一个本地分支,git checkout -b mybranch。我在上游git上用bitbucket GUI创建了一个分支,并将我的本地分支(mybranch)推到该上游分支。一旦我在我的本地git上进行了git取回来检索上游分支,我可以做一个git分支-d mybranch。

注:根据评论意见,措辞有所改变。由于@slekse 这不是错误,这是警告。这意味着您将要删除的分支包含从以下任何一个都无法到达的提交:它的上游分支或HEAD(当前检出的修订)。换句话说,当你失去提交¹。

在实践中,这意味着你可能修改、重基(包括压缩合并)或过滤提交,它们看起来并不相同。

因此,你可以通过签出一个分支来避免这个警告,这个分支包含了你要删除的另一个分支

你会想要验证你实际上没有错过任何重要的提交:

git log --graph --left-right --cherry-pick --oneline master...experiment

这将为您提供分支之间任何非共享的列表。如果你好奇的话,在没有选择的情况下可能会有区别,这种差异很可能是你得到警告的原因:

--cherry-pick Omit any commit that introduces the same change as another commit on the "other side" when the set of commits are limited with symmetric difference. For example, if you have two branches, A and B, a usual way to list all commits on only one side of them is with --left-right, like the example above in the description of that option. It however shows the commits that were cherry-picked from the other branch (for example, "3rd on b" may be cherry-picked from branch A). With this option, such pairs of commits are excluded from the output.


¹默认情况下,它们只会在一段时间后被垃圾收集。另外,git-branch命令不会检查所有分支的修订树。这个警告是为了避免明显的错误。

²(我更倾向于强制删除,但你可能想要额外的保证)。

有解释的最简单解决方案(重复检查解决方案)(之前遇到过这个问题)

问题是:

1-我不能删除分支

2-终端保持显示一个警告消息,有一些提交还没有被批准

3-知道我检查了主和分支,他们是相同的(最新)

解决方案:

git checkout master
git merge branch_name
git checkout branch_name
git push
git checkout master
git branch -d branch_name

解释:

当你的分支连接到上游的远程分支(在Github, bitbucket或其他平台上)时,你需要将它合并(推送)到主平台,你需要将新的更改(提交)从分支推送到远程repo (Github, bitbucket或其他平台),

我在我的代码中所做的是,我切换到master,然后将分支合并到它(以确保它们在你的本地机器上是相同的),然后我再次切换到分支,并使用“git push”将更新或更改推到远程在线回购。

之后,我再次切换到master,尝试删除分支,问题(警告消息)消失,分支删除成功