无法将文件从原点/ <名称>提交到原点/主文件

时间:2018-09-04 19:53:59

标签: git

在对master分支进行一些修复时,我不小心创建了一个新的分支origin / ,并上传了该分支,并且git显示刚刚创建了分支名称。 当我执行$ git show-ref

输出为:

57c425c922d25ebb90c0acdb824f103eb5086188 refs/heads/master
57c425c922d25ebb90c0acdb824f103eb5086188 refs/remotes/origin/HEAD
57c425c922d25ebb90c0acdb824f103eb5086188 refs/remotes/origin/master
aeb2652a82d0d95af940d42007e4315621f7e4d1 refs/remotes/origin/ron

我的代码未与起源/母版合并。 我该如何清理?并使用一个新的本地分支并将所有更改提交到存储库中的master分支

1 个答案:

答案 0 :(得分:2)

首先要解决一个术语问题,因为否则一切都会令人困惑:

  • 诸如master之类的名称是分支名称

  • 诸如origin/master之类的名称是远程跟踪名称,或者有时(实际上,更通常是)称为远程跟踪分支名称 em>。我不喜欢这个词,因为这些远程跟踪的东西不能像(本地)分支名称那样正常工作,并且容易混淆两者。

这两个都存在于您自己的Git存储库中,但是由于 一些其他Git存储库,远程跟踪名称存在

  • origin本身是一个远程。遥控器只是代表其他一些Git存储库的简称,它存储一个URL,通过该URL 您的 Git可以调用该 other Git。

牢记所有这些,有一个秘诀很重要,git show-ref向您展示了:分支名称和远程跟踪名称都使用了更通用的机制。这意味着它们具有完整名称,分别以refs/heads/refs/remotes/开头拼写。

您无法使用git branchgit checkout -b创建远程跟踪名称。您只能创建一个分支名称。您的Git将基于 other Git的分支名称来创建,更新和销毁远程跟踪名称!记住,每个Git都是自己的Git,因此每个都有自己的分支名称。您的远程跟踪名称只是Git记住 Git分支名称的方式。

现在,你说:

  

...我不小心创建了一个新的分支原点/ ...

但是如上所述,您实际上不能做到这一点。您可以 创建一个名为origin/ron的(本地)分支,但其全名将为refs/heads/origin/ron 1 您的{{1} }输出显示git show-branch,这意味着您不要拥有一个名为refs/remotes/origin/ron的分支。这意味着没有什么可以删除!

现在,如果您想让ron走开,那会有些棘手。您需要说服 other Git删除名为origin/ron its 分支。如果您使用Web GUI与另一个Git对话,则它可能具有自己的clicky按钮,用于在该Git中创建和删除分支名称。或者,您可以使用自己的Git及其ron向其Git发送一个请求,要求他们删除他们的 git push,这很简单:

ron

会做到这一点。

一旦没有有一个名为git push --delete origin ron 的分支-在其 the Git中其全名是ron的引用,您然后希望让您的 Git获取其最新信息,并使用该信息通过以下方式“修剪”您剩下的任何远程跟踪名称

refs/heads/ron

这将使您的Git调用其Git并获取其分支列表(现在将不包括其git fetch --prune origin ),然后根据其分支更新您的远程跟踪名称(这将删除您的{ {1}}。


1 不要这样做!它不会破坏Git — Git知道,由于ron部分的缘故,它是一个分支名称,而不是一个远程跟踪名称,但令人困惑。如果您确实是这样做的,请使用origin/ron删除它,或使用refs/heads/重命名它(m代表“ move” =重命名),这样它就不会看起来像一个远程跟踪名称