Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在github中删除本地分支_Git_Github_Version Control - Fatal编程技术网

在github中删除本地分支

在github中删除本地分支,git,github,version-control,Git,Github,Version Control,我有一个本地分支机构,名为大众传播rm,我已将代码推送到该分支机构,但由于一些问题,我从本地删除了该分支机构,现在我再次创建了同名分支机构,因此如果我将代码推送到该分支机构,那么会发生什么情况,它将创建一个单独的分支机构,还是将代码推送到同一分支机构。如您所说,您从本地而不是远程删除了该分支。现在重写它并尝试推送,它将合并到同一个远程分支。您不必创建具有相同名称的新分支。 只需签出到分支机构: git checkout mass-communication-rm git足够聪明,可以创建大众通

我有一个本地分支机构,名为大众传播rm,我已将代码推送到该分支机构,但由于一些问题,我从本地删除了该分支机构,现在我再次创建了同名分支机构,因此如果我将代码推送到该分支机构,那么会发生什么情况,它将创建一个单独的分支机构,还是将代码推送到同一分支机构。

如您所说,您从本地而不是远程删除了该分支。现在重写它并尝试推送,它将合并到同一个远程分支。

您不必创建具有相同名称的新分支。 只需签出到分支机构:

git checkout mass-communication-rm
git足够聪明,可以创建大众通信rm的本地分支,如果它只作为远程分支存在的话。本地分支是自动创建的,它将跟踪其对应的远程分支

这是恢复已删除的分支的最安全方法;阿法克


我知道这并没有像在文章中那样回答您最初的问题,但我认为这回答了促使您撰写文章的根本原因。

Github将尝试将更改推送到同一分支。这取决于它是否会。如果您的新本地分支机构的代码与在线分支机构的代码完全相同,Githhub将允许您推动新的更改。否则,它将显示一个错误

更新被拒绝,因为远程包含您没有的工作

解决方案:1

更好的解决方案是使用以下方法删除您的本地分支:

git branch -D mass-communication-rm
注:将删除本地分公司大众传播rm中的所有代码

现在使用

git fetch origin mass-communication-rm
结帐到那家分行

git checkout mass-communication-rm
继续你的工作

解决方案:2

另一个解决方案可能是拉在线大众传播rm分支。它会将在线分支合并到本地分支,然后尝试推送。它会起作用的


干杯

对Git来说重要的是提交

要真正理解发生了什么,请将这两个想法分开:

提交具有散列ID,如b7bd9486b055c3f967a870311e704e3bb0654e4f。 像master这样的分支名称只存储一个提交散列ID。 任何提交的真实名称都是它的原始散列ID。如果我有提交b7b,而你有提交b7b,那么我们有相同的提交。只要ID匹配,我们使用的分支名称或名称就无关紧要

当你在Git中删除一个分支名称时,几乎所有的情况都是这样:你删除了mass communication rm这个名称,Git用它来记住一些丑陋的散列ID。让我们用字母MCR来代替散列ID。因为你之前运行了一个成功的Git推送,所以你发送了这个提交,一个ID为MCR的提交,到另一个Git存储库,而另一个Git存储库现在拥有它。只要他们还有commit MCR,您就可以随时调用Git存储库并将其取回

现在,当你在GitHub commit MCR上给他们Git时,你称之为大众传播rm。你可能让他们称之为大众传播室。记住,他们的Git和你的Git一样:它有自己的分支名称。就像在Git中一样,它们的每个分支名称都会记住一个丑陋的哈希ID

您的Git还记得他们的Git存在,并且有一个URL,您的Git存储在远程名称origin下。您自己的Git将在您自己的Git的origin/*名称下记住它们的分支名称,您的Git称之为远程跟踪名称。这意味着您的Git有一个名字,origin/mass communication rm,它记住commit MCR的散列ID。。。所以你的Git仍然有这个丑陋的哈希ID的名字

让我们回顾一下:

你的Git通过你的Git称之为远程的短名称来源来记住他们Git的URL。 你给了他们GitHub上的GIt,在那个URL提交MCR,并告诉他们以大众传播rm的名义保存它。 因此,您的Git具有origin/mass communication rm,它记住commit MCR的大而丑陋的散列ID。 如果您运行git branch-r列出远程跟踪名称,或运行git branch-a列出本地分支名称和远程跟踪名称,您将看到您自己的大众传播rm消失了,但origin/mass communication rm仍然存在。1

这反过来意味着您可以运行:

$ git checkout mass-communication-rm
根据源站/大众传播rm重新创建您自己的本地大众传播rm名称。也就是说,您的Git将创建一个新的本地分支名称,并填充到该名称中,即Git在origin/mass communication rm名称下记住的丑陋的大哈希ID

然后可以添加新的提交。向分支添加一个新的提交包括以通常的方式进行新的提交,然后让您自己的Git设置您的分支名称,以记住Git为该新提交生成的新的、唯一的、丑陋的哈希ID。新提交本身会记住以前的散列ID;您自己的分支名称会记住新ID,您的Git会通过从新提交向后搜索来找到旧提交(我们在这里调用的MCR)

有关上述内容的更多信息,包括 分支名称用于保持提交活动,请参阅

1请注意,git branch-r打印源站/大众通信rm,但git branch-a打印远程/源站/大众通信rm。全名为refs/remotes/origin/mass Communications rm。您所在分支机构的全称为refs/heads/mass Communications rm

Git通常会去掉这些名称的refs/和heads/或remotes/部分,因为它们不是很有用。出于某种未知的原因,git branch-a并没有剥离遥控器/部件,而git branch-r却剥离了遥控器/部件