我有一个名为mass-communication-rm
的本地分支,并且已将代码推送到该分支,但是由于某些问题,我从本地删除了该分支,现在又用相同的名称创建了该分支,因此如果我将代码推送到该分支,因此会发生什么情况,它将创建一个单独的分支,或者将代码推送到同一分支。
答案 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 。
要真正了解正在发生的事情,请将这两个想法分开记住:
b7bd9486b055c3f967a870311e704e3bb0654e4f
。master
这样的任何提交的真实名称是其原始哈希ID。如果 I 提交了b7b<blah>
,而 you 提交了b7b<blah>
(对于相同的
当您在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!
让我们回顾一下:
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
仍然在那里。 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
会剥离。