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

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有点陌生,我不知道我还能合并多少两个分支。我错过了什么?


当前回答

正如Drew Taylor指出的那样,使用-d删除分支只考虑当前的HEAD来确定分支是否“完全合并”。即使分支与其他分支合并,它也会报错。在这方面,错误信息绝对可以更清楚…… 你可以在删除之前签出合并的分支,或者只是使用git branch -D。大写的-D将完全覆盖支票。

其他回答

你可以简单地算出:

Git日志-樱桃大师…实验性的

-cherry选项是-right-only -cherry-mark -no-merges的同义词

Git-log手册页说

将输出限制到我们这边的提交,并用git log标记那些已经应用到fork历史另一边的提交,这是很有用的。Mybranch,类似于git樱桃上游的Mybranch。

仅供参考。——cherry-pick会省略相同的提交,但——cherry-marks不会。在上游和联合工作公共分支之间查找rebase并强制更新更改是有用的

我今天就遇到了这种情况,因为我正在将我的第一个功能分支合并回master中。正如一些人在SO的其他地方说的,诀窍是在尝试删除分支之前切换回master。一旦回到master, git很乐意在没有任何警告的情况下删除分支。

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

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

公认的答案是正确的。在这里,我想补充三点:

这是如何发生的(经常发生在我身上) 举个例子 如何确保在通过-D强制删除之前不遗漏任何更改

我在GitHub上使用Rebase和merge作为默认的PR合并方法。这将为相同的更改创建新的提交(哈希)。

例如,当我跑步的时候

git log --graph --left-right --oneline add-theme-dark-2...main

在我的一个项目中,我得到了这个:

> fba6fce (HEAD -> main, tag: v2.0.9, origin/main) Refactored to semantic class names.
> 4e665bc Refactored to semantic class names. (1a)
....
> 8bd13a6 Added 'font-semibold' to title.     (2a)
< 23f7b8a (add-theme-dark-2) Refactored to semantic class names.
< cf71814 Refactored to semantic class names.  (1b)
....
< d3a774a Added 'font-semibold' to title.      (2b)
(END)

注意1a/1b和2a/2b有不同的提交哈希值。

要确保您没有错过更改,请运行:

git log --graph --left-right --cherry-pick --oneline add-theme-dark-2...main

如果它返回一个列表,则每一行都以“=”开头:

= fba6fce (HEAD -> main, tag: v2.0.9, origin/main) Refactored to semantic class names.
= 4e665bc Refactored to semantic class names.
...
= 346770b Moved text size to component.
= 68cd471 Added theme-dark.
= 8bd13a6 Added 'font-semibold' to title.

使用以下命令可以安全地删除分支:

git branch -D add-theme-dark2
C:\inetpub\wwwroot\ember-roomviewer>git branch -d guided-furniture
warning: not deleting branch 'guided-furniture' that is not yet merged to
         'refs/remotes/origin/guided-furniture', even though it is merged to HEAD.
error: The branch 'guided-furniture' is not fully merged.
If you are sure you want to delete it, run 'git branch -D guided-furniture'.

对我来说,解决方案很简单,就是需要将功能分支推到远程。当我跑的时候:

git push origin guided-furniture
/* You might need to fetch here */
git branch -d guided-furniture

Deleted branch guided-furniture (was 1813496).