为什么它不是一个提交,也不能从中创建一个分支?

98

我需要处理一组复杂的仓库配置。我有五个仓库:

  1. 机器1上的远程中央仓库。
  2. 我笔记本电脑(机器2)上的本地仓库。
  3. 机器3上的裸仓库。
  4. 机器3上的仓库。
  5. 我们进行代码审查的机器4上的仓库。

因此,我理解它是这样工作的:

  1. 在我的笔记本电脑(机器2)上,我从位于机器1上的中央仓库克隆/拉取。
  2. 我将本地仓库推送到机器3(使用裸仓库作为“中间件”)。

现在我在机器3上进行了一些更改,并且我想将这些更改推送到机器4。以下是我需要按照的说明:

  1. 在机器3上,在您的测试分支中完成所有工作,提交。
  2. 将其推送到机器3上的裸仓库:git push origin test-branch
  3. 在您的笔记本电脑上:从machine-3仓库获取新的提交:git fetch machine3
  4. 从机器3检出您的分支:git checkout -b test-branch machine-3/test-branch
  5. 从machine-4获取提交:git fetch origin
  6. git rebase origin/master
  7. git push origin HEAD:refs/for/master

我在第4步遇到问题,我收到以下错误:

fatal: 'machine3/test-branch' 不是提交,分支无法从它创建

附加

当我执行:

git rev-parse machine3/test-branch

在我的笔记本电脑(机器2)上,我得到了以下结果:

machine3/test-branch

fatal: ambiguous argument 'machine3/test-branch': unknown revision or path not in the working tree.

Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

1
Machine 3的repo是空的,这意味着它没有任何工作树。git checkout -b test-branch machine-3/test-branch需要一个工作树,所以它会失败。此外,您需要检查machine3/test-branch是否存在。https://mijingo.com/blog/what-is-the-working-tree-in-git - ElpieKay
1
抱歉我错过了。git rev-parse machine3/test-branch 输出什么? - ElpieKay
1
在你运行第四步的仓库中。 - ElpieKay
1
让我们在聊天中继续这个讨论 - ElpieKay
git pull怎么样? - Charlie Parker
显示剩余4条评论
17个回答

0
我遇到了一个问题,当我使用git checkout name-branch命令创建分支后,使用git branch命令检查分支时没有任何反应。经过数小时的尝试和研究后,我尝试运行git push GitHub-URL name-branch命令,它直接将提交推送到该分支。希望这可以帮助到你。

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0

我的问题是我在新分支名称中有一个空格

问题:

git checkout -b my-new-branch name

而不是

git checkout -b my-new-branch-name


0

我在GitHub上使用同事的PR旁边的“复制”工具时遇到了这个问题。他的分支名称类似于coworker/ticket-number,而git checkout --track coworker/ticket-number是从粘贴中得出的。

当我回到我的常规工作流程时,使用git branch -r | grep ticket-number,我发现我需要使用的实际分支名称是origin/coworker/ticket-number


0

对于那些在搜索答案时发现了fatal: 'origin/remote-branch-name' is not a commit and a branch 'local-branch-name' cannot be created from it的错误信息,我们刚刚发现另一个可能性是远程分支已经被合并了 :embarrassed:


0
我遇到了同样的错误,解决方法就是简单地分两步创建分支:
  1. 从我想创建新分支的现有分支上切换。 例如:git checkout dev 这将把你切换到dev分支。
  2. 在dev分支上创建新分支 例如:git checkout -b <new_feature_branch> dev

-1

解决方案来自J.D. Mallen,涉及git fetch --all

从VSCode 1.53(2021年1月)开始,您将拥有(问题110811PR111090):

autofetch更改为字符串配置,其中包含"current","all"和"off"。

这允许用户从所有远程获取,而不仅仅是它们的origin
对于在Fork上工作的开发人员,这应该使扩展更加直观。

因此,如果将VSCode设置git.autofetch设置为"all",您甚至无需输入git fetch --all


Charlie Parker评论中补充道:

git pull呢?

这假设你已经在一个当前分支上,并且已经设置了一个远程跟踪分支。

原始问题没有这样的分支,这意味着git pull不知道从哪个获取的分支进行合并。


-2

我使用了在Visual Studio Code中使用Git工作流程,如下图所示,来解决我的问题:

create a feature branch using git on vscode


为什么答案被投票否决了?我想知道,毕竟我只是提到了我解决类似问题的方法。 - Okpo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接