ChatGPT解决这个技术问题 Extra ChatGPT

如何解决 git 的“不是我们可以合并的东西”错误

我刚刚在git中将分支合并到master时遇到了一个问题。首先,我通过运行 git ls-remote 获得了分支名称。我们称该分支为“分支名称”。然后我运行 git merge branch-name 命令并得到以下结果:

fatal: branch-name - not something we can merge

如何解决此错误?

唯一对我有用的是使用命令行自动完成。我输入了 git 并自动完成了合并和分支名称。即使复制粘贴分支名称也失败了,所以可能有隐藏的字符,这摆脱了它们。我在 bash 4.4 上,不确定这是否适用于所有 shell。自动完成 git 命令对我来说是新事物。

C
Community

How does "not something we can merge" arise? 所示,此错误可能源于分支名称中的拼写错误,因为您试图拉取一个不存在的分支。

如果这不是问题(如我的情况),很可能您没有要合并的分支的本地副本。 Git 需要两个分支的本地知识才能合并这些分支。您可以通过签出要合并的分支然后返回要合并到的分支来解决此问题。

git checkout branch-name
git checkout master
git merge branch-name

这应该可以,但是如果您收到错误消息

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

在签出分支之前,您需要获取远程(可能但不一定是“原点”):

git fetch remote-name

添加新遥控器后发生这种情况 - 我需要先执行 git fetch,然后才能合并远程分支。
当我被 cd 到错误的项目时,这发生在我身上(即它是一个不同的 repo,甚至没有我想要合并的分支)
如果您尝试在命令行 (help.github.com/articles/syncing-a-fork) 同步分叉,则此错误可能是因为您错过了第 0 步。什么?没有列出第 0 步?是的,这就是为什么它很容易错过。 “在你可以将你的 fork 与上游存储库同步之前,你必须在 Git 中配置一个指向上游存储库的远程。” <-- 这是第 0 步。如果您跳过该步骤,则会收到上述错误,您可能会将其输入 Google,将您带到这里。 :-)
Git requires local knowledge of both branches in order to merge those branches
为我工作(我已经从存储库克隆)
p
pkamb

这是一个愚蠢的建议,但请确保分支名称中没有错字!


没那么傻,因为“错字”可能会简化为尚未获取分支的事实(因此在本地未知).. Git 做的事情与 CVS 或 SVN 不同..
如果分支名称包含逗号 (,) 或撇号 (') 等字符,也可能会导致该问题。
还要确保您位于正确的存储库或终端窗口/选项卡中,特别是如果您同时处理多个存储库。
这发生在我身上,主/主重命名不均匀!
一定要确保你的分支名称没有错字!谢谢@endless!
E
Eneko Alonso

从远程上游拉时,git fetch --all 为我做了诀窍:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

在其他情况下,我发现如果远程(原点,上游)分支不存在,也会发生“我们不能合并的东西”错误。这似乎很明显,但您可能会发现自己在只有 master 的存储库上执行 git merge origin/develop


我真的不知道为什么这个答案没有获得与上述答案一样多的选票。 'git fetch -all' 是在合并远程分支之前通常会错过运行的命令,它为我解决了这个问题。
因为 fetch 不会自动拉取,您必须手动执行此操作。所以一对 fetch --all & pull --all 就可以了。
谢谢! git remote add upstream 是我缺少的重要东西,它为我解决了这个问题。我认为一个常见的错误是假设一个分叉自动知道它是从哪里分叉的。
s
spekulatius

我也有这个问题。分支看起来像“用户名/主控”,这似乎让 git 感到困惑,因为它看起来像我定义的远程地址。对我来说使用这个

git merge origin/username/master

工作得很好。


我也必须将 origin/ 放在远程分支的名称之前。
如果分支名称中包含正斜杠 /,则必须执行此操作。
S
SherylHohman

以下方法每次都适用于我。

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged

这对我有用,谢谢。我这基本上是正确的解决方案:基本上确保在尝试合并之前检查源分支。
这对我有用,但不知道为什么?你可以解释吗?
A
Alok Kamboj

这可能是因为该分支不在您的本地。合并使用前

git fetch origin

y
yala ramesh

这个答案与上述问题无关,但我遇到了类似的问题,也许这对某人有用。我正在尝试将我的功能分支合并到 master,如下所示:

$ git merge fix-load

为此收到以下错误消息:

合并:修复加载 - 不是我们可以合并的东西

我研究了所有解决方案,但并非没有任何解决方案。

最后,我意识到问题原因是我的分支名称拼写错误(实际上,合并分支名称是 fix-loads)。


对我来说,添加原点有效。以您为例,git merge origin/fix-loads 有效。
v
voidone

如果您没有使用 origin 关键字并且该分支不是您自己的分支,您也可能会遇到此错误。

git checkout <to-branch> 
git merge origin/<from-branch>

B
Bilal Ahmed Yaseen

您收到此错误是因为您要合并的分支在您的本地存储库中不存在。

因此,首先通过以下命令检查要合并到 master 分支的分支:

git checkout branch_name_to_merge

在此之后尝试通过以下命令将其与 master 分支合并:

git merge branch_name_to_merge

如果您不注意分支的名称(即拼写错误),也会发生这种情况:)
这对我有用。当我使用 Git 选项卡在 Atom 中工作并使用下拉菜单切换分支时,有时我必须转到命令行并 checkout 分支
A
Amar Magar

此错误表明您要合并更改的分支(即在您的情况下为分支名称)在您的本地不存在,因此您应该签出分支并获取本地更改。结帐到您的主分支并获取,然后按照以下步骤操作:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

我会很挑剔,并说我不认为错误消息暗示了上述任何内容:-)
D
David B

我今天在直接从master中提取后将另一个分支合并到我的分支时遇到了这个问题,我必须先签出并拉出我正在合并的分支,然后我才能成功地将这个分支合并到我的分支中。

git checkout branch-to-merge
git pull
git checkout my-branch-name
git merge branch-to-merge

O
Optimist Rohit

我必须建议检查所有分支或您正在寻找的分支首先可用

git branch -r

从列表中检查

origin/HEAD -> origin/main
origin/feature/branch_1
origin/feature/branch_2
origin/feature/branch_3
origin/feature/branch_4
origin/feature/your branch

建议从来源本身复制列表,然后执行 git merge origin/feature/branch_2。复制粘贴将删除拼写错误。


p
purelylogical

我在执行 git merge BRANCH_NAME "some commit message" 时收到此错误 - 我忘记为提交消息添加 -m 标志,因此它认为分支名称包含评论。


s
slfan

在我看来,我错过了用远程仓库映射我的本地分支。我在下面做了,效果很好。

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain

o
ocroquette

如果包含引用的字符串是由另一个 Git 命令(或任何其他 shell 命令)生成的,请确保它的末尾不包含回车。在将字符串传递给“git merge”之前,您必须将其剥离。

请注意,发生这种情况时非常明显,因为错误消息在 2 行:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

当您对答案投反对票时,请提供评论。也许这不是原始海报的问题,但它可能是错误消息的原因(我自己遇到了问题)。
D
Doug

我们收到此错误是因为我们在分支名称中有一个逗号 (,)。我们删除了本地分支,然后以不带逗号的新名称重新检查它。我们能够成功地合并它。


下划线似乎也有问题。 +1
我经常在分支名称中使用下划线@AndersLindén
括号也有问题...+1
P
PoojaArora

就我而言,问题出在分支名称中。我的新分支名称包含括号,一旦我重命名它并删除括号,它就会排序。


V
Vikas Chauhan

我知道现在回答很晚,但我也遇到了同样的问题,所以我运行了以下命令

git checkout master

接着

git pull origin branch-name

它解决了我的问题


B
Bennett Elder

对于后代:就像 AxeEffect 所说的那样......如果您没有拼写错误,请检查您的本地分支名称中是否有荒谬的字符,例如逗号或撇号。正是刚才发生在我身上的事。


或下划线。 +1
e
eaykin

我建议检查您是否能够切换到您尝试合并的分支。

即使我想合并的分支在本地存储库中并且没有拼写错误,我也收到了这个错误。

我忽略了本地更改,以便可以切换到分支(也可以首选存储或提交)。之后我切换回初始分支,合并成功。


y
yogeswaran

您尝试合并的分支目前可能无法被您的 git 识别,因此执行 git branch 并查看您要合并的分支是否存在,如果不存在则执行 git pull,如果您现在执行 {1 },分支现在可见,现在您执行 git merge <BranchName>


J
Jaied

我有同样的问题。我使用以下命令修复了它:

git checkout main
git fetch
git checkout branch_name
git fetch
git checkout main
git fetch
git merge branch_name

T
TonyStark

就我而言,我试图从 git 存储库的子目录执行 git 命令。请确保它是你用 git 初始化的目录,而不是它的子目录。


同样在这里。我的终端位于多仓库项目的同级目录中。
P
Piyush Sarin

相同的原因可能有很多:

git merge dependabot/npm_and_yarn/storybook/addon-essentials-6.4.19
merge: dependabot/npm_and_yarn/storybook/addon-essentials-6.4.19 - not something we can merge

您的分支名称带有特殊字符。(在我的情况下): 解决方案:从无法合并的分支中签出具有简单名称的新分支。那会有所帮助。

git checkout -b feature-addon
git checkout dev
git merge feature-addon

此错误可能是由于分支名称中的拼写错误引起的,因为您试图拉出一个不存在的分支。非常愚蠢,但很可能您没有要合并的分支的本地副本。尝试 git fetch 获取它


G
Gabriel Arghire

如果您遵循旧教程,请检查 master 分支是否命名为 main 或类似名称。

该错误告诉您 branch-name 必须是您的分支之一的名称。


L
Levon Petrosyan

对我来说,当我尝试这个时出现了问题:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

所以实际上我应该写 master 而不是 develop,因为 master 是 Subtree 的分支名称,而不是我的实际分支。


s
superarts.org

这可能听起来很奇怪,但请记住设置您的 git 电子邮件和名称:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

A
Aryelson Santos

对我来说,问题是合并消息中的“双引号”。因此,当我删除双标记时,一切都神奇地起作用了。我希望能帮助别人。 (对不起我的英语不好)


V
Vyas Bharghava

我有一个带有 master 的工作树,另一个分支在两个不同的工作文件夹中签出。

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

如果您只需要合并最新的提交:

git merge origin/vyas-cr-core 
git push

和我一直做的一样:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push

H
Héctor Paúl Cervera-García

git rebase the-branch-to-be-merged

我使用这个 git 命令解决了这个问题,但 rebase 仅适用于某些情况


我会避免变基,我认为这个基本的分支合并错误似乎非常极端。