我有一个名为mass-communication-rm
的本地分支,我已将代码推送到该分支但由于某些问题我从本地删除了该分支,现在我又创建了具有相同名称的分支,因此如果我将代码推送到该分支那么将会发生什么它创建一个单独的分支或代码将被推送到同一分支。
您不必创建具有相同名称的新分支。结帐到分行:
git checkout mass-communication-rm
如果它只作为远程分支存在,那么git足够聪明,可以创建mass-communication-rm
的本地分支。本地分支自动创建,它将跟踪其对应的远程分支。
这是删除同一分支时最安全的方法;据我所知。
我理解这不会回答你在帖子中的原始问题,但我认为这解决了推动你撰写帖子的根本原因。
正如您所说,您从本地删除了该分支,而不是远程。现在重写它并尝试推送,它将合并到同一个远程分支。
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分支。它会将在线分支合并到您的本地分支,然后尝试推送。它会工作。
干杯!
对Git来说重要的是提交。
要真正了解正在发生的事情,请将这两个想法分开:
b7bd9486b055c3f967a870311e704e3bb0654e4f
。master
这样的分支名称只存储一个提交哈希ID。任何提交的真实名称都是其原始哈希ID。如果我已经提交b7b<blah>
,你已经提交b7b<blah>
(同样的
),我们也一样
承诺。只要ID匹配,无论我们使用哪个分支名称或名称都无关紧要。
当您在Git中删除分支名称时,几乎所有这一切都发生了:您已经删除了名称mass-communication-rm
,您的Git用它来记住一些丑陋的哈希ID。让我们使用字母MCR来代表哈希ID。由于您之前运行了成功的git push
,因此您将该提交(ID为MCR的提交)发送到另一个Git存储库,而其他Git存储库现在拥有它。只要他们仍然提交MCR,您就可以随时调用该Git存储库并将其恢复。
现在,当你给他们--GitHub-commit MCR上的Git时,你称之为mass-communication-rm
。你可能告诉他们称之为mass-communication-rm
。记住,他们的Git就像你的Git:它有自己的分支名称。就像在你的Git中一样,他们的每个分支名称都会记住一个大丑陋的哈希ID。
你的Git还记得他们的Git存在并且有一个你的Git存储在远程名称origin
下的URL。你自己的Git会在你自己的Git的origin/*
名称下记住他们的分支名称,你的Git称之为远程跟踪名称。这意味着你的Git有一个名字,origin/mass-communication-rm
,它记住了提交MCR的哈希ID ......所以你的Git还有一个这个丑陋的哈希ID的名字!
让我们来复习:
origin
(你的Git称之为遥控器)记住他们的Git的URL。mass-communication-rm
下面。origin/mass-communication-rm
,它记住了提交MCR的丑陋哈希ID。如果运行git branch -r
(列出远程跟踪名称)或git branch -a
(列出本地分支名称和远程跟踪名称),您将看到自己的mass-communication-rm
消失了,但origin/mass-communication-rm
仍然存在。
反过来,这意味着您可以运行:
$ git checkout mass-communication-rm
根据mass-communication-rm
重新创建您自己的本地origin/mass-communication-rm
名称。也就是说,你的Git将创建一个新的本地分支名称,并在该名称中填入你的Git在名称origin/mass-communication-rm
下记住的大丑陋哈希ID。
然后,您可以添加新提交。向分支添加新提交包括进行新提交(以通常的方式),然后让您自己的Git设置您的分支名称以记住您的Git为新的生成的新的,唯一的,大丑陋的哈希ID承诺。新提交本身会记住以前的哈希ID;你自己的分支名称会记住新的ID,你的Git会通过从新提交向后搜索找到旧的提交 - 我们在这里调用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
。