本地分支已在github中删除

时间:2018-09-01 08:46:26

标签: git github version-control

我有一个名为mass-communication-rm的本地分支,并且已将代码推送到该分支,但是由于某些问题,我从本地删除了该分支,现在又用相同的名称创建了该分支,因此如果我将代码推送到该分支,因此会发生什么情况,它将创建一个单独的分支,或者将代码推送到同一分支。

4 个答案:

答案 0 :(得分:1)

您不必创建具有相同名称的新分支。 只需结帐至分支:

git checkout mass-communication-rm
如果

git仅作为远程分支存在,它足以创建mass-communication-rm的本地分支。本地分支是自动创建的,它将跟踪其对应的远程分支。

这是恢复与删除的分支相同的最安全的方法; AFAIK。

我知道这不能像帖子中那样回答您的原始问题,但是我认为这回答了导致您撰写帖子的根本原因。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Github将尝试将更改推送到同一分支。是否会视情况而定。如果新的本地分支机构的代码与在线分支机构的代码完全相同,Githhub将允许您进行新的更改。否则,将显示错误提示

  

更新被拒绝,因为遥控器包含您没有的工作

解决方案:1

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

git branch -D mass-communication-rm

注意::它将删除本地分支 mass-communication-rm

中的所有代码

现在使用来获取在线分支

git fetch origin mass-communication-rm

结帐至该分支

git checkout mass-communication-rm

继续您的工作...

解决方案:2

其他解决方案可能是取消在线 mass-communication-rm 分支。它将在线分支合并到您的本地分支,然后尝试推送。它将起作用。

干杯!

答案 3 :(得分:0)

对Git重要的是 commits

要真正了解正在发生的事情,请将这两个想法分开记住:

  • 提交具有哈希ID,例如b7bd9486b055c3f967a870311e704e3bb0654e4f
  • master这样的
  • 分支名称只需存储一个提交哈希ID。

任何提交的真实名称是其原始哈希ID。如果 I 提交了b7b<blah>,而 you 提交了b7b<blah>(对于相同的),则我们具有相同的 commit 。只要 ID 匹配,分支名称或我们使用的名称都没有关系。

当您在Git中删除分支名称时,几乎所有事情都发生了:您删除了名称 mass-communication-rm,Git用来记住一些大的丑陋哈希ID 。让我们使用字母 MCR 代表哈希ID。由于您之前成功运行了git push,因此您将ID为 MCR commit 发送到了另一个Git存储库,而另一个Git存储库现在有了它。只要他们仍具有提交 MCR ,您就可以随时调用该Git存储库并将其取回。

现在,当您给他们(GitHub上的Git)提交 MCR 时,您将其称为mass-communication-rm。您可能已经告诉他们将其称为mass-communication-rm。请记住,它们的Git就像您的Git:它具有自己的分支名称。就像在Git中一样,每个分支名称都记住一个大的丑陋哈希ID。

您的Git还记得他们的Git存在,并且有一个URL,您的Git使用远程名称 origin存储该URL。您自己的Git会记住您自己的Git的origin/*名称下的他们的分支名称,您的Git称之为远程跟踪名称。这意味着您的 Git的名称为origin/mass-communication-rm,它记住提交 MCR 的哈希ID ...因此,您的Git仍然具有名称为此大丑陋的哈希ID!

让我们回顾一下:

  • 您的Git通过短名称origin(您的Git称为远程)来记住其Git的URL。
  • 您给了他们-GitHub上位于该URL的GitHub上的GIt-提交了 MCR ,并告诉他们将其保留为他们的名称mass-communication-rm
  • 您的 Git拥有origin/mass-communication-rm,它可以记住提交 MCR 的丑陋哈希ID。

如果运行git branch -r(列出远程跟踪名称)或git branch -a(列出本地分支名称​​和远程跟踪名称),您将看到您自己的mass-communication-rm不见了,但origin/mass-communication-rm仍然在那里。 1

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

$ git checkout mass-communication-rm

重新创建您自己基于mass-communication-rm的本地origin/mass-communication-rm名称。也就是说,您的Git将创建一个新的本地分支名称,并将其填充到该名称中,即您的Git在名称origin/mass-communication-rm下记住的丑陋的哈希ID。

然后可以添加新的提交。向分支添加新提交包括(按通常方式)制作新提交,然后让自己的Git设置您的分支名称来记住新的,唯一的,您的Git为新提交生成的 的big-ugly-hash-ID。新提交本身会记住上一个哈希ID。您自己的分支名称会记住新的ID,而您的Git会通过向后搜索 来找到 old 提交(在这里我们称之为 MCR )。 >来自新提交。

有关上述内容的更多信息,包括分支名称在保持提交“有效”方面的另一角色,请参阅Think Like (a) Git


1 请注意,git branch -r打印origin/mass-communication-rm,而git branch -a打印remotes/origin/mass-communication-rm完整名称为refs/remotes/origin/mass-communication-rm。您自己的分支的全名是refs/heads/mass-communication-rm

Git通常会去除这些名称的refs/heads/remotes/部分,因为它们用处不大。由于某些未知的原因,git branch -a不会剥离remotes/部分,而git branch -r会剥离。