两个用户试图推送两个具有相同名称的分支

时间:2014-03-04 18:15:56

标签: git git-branch

这是我的场景:有两个用户,他们都克隆了相同的存储库(所以这意味着他们有相同的遥控器)。 一个人在本地创建一个分支,假设'branch1'开始在其中开发/提交,并且最终希望将分支推送到远程。 这是可能的。

然而,第二个做同样的事情,创建一个具有相同名称的分支('branch1'),在其中提交一些内容并最终希望推送; 这可能吗?他应该运行哪些命令才能工作?在推动之前是否足够拉?

感谢。

5 个答案:

答案 0 :(得分:1)

首先,这听起来很危险,可能导致意外删除或合并代码。我认为更好的方案是第一个人创建分支并推动它,然后第二个人拉下分支并从那里开始工作。

但是,我认为 ONE WAY 这样做是第二个人可以获取历史记录,然后将远程分支合并到他们的本地分支中,然后推送他们的分支。

git fetch
git checkout branch1
git merge origin/branch1
git branch -u origin/branch1
git push

从这一点开始,第二个人应该让他们的本地分支跟踪相同的远程分支并完全合并和集成。

答案 1 :(得分:1)

不要求推送到远程的本地分支名称和分支名称相同。这对于这种情况非常有用,特别是与“命名空间”分支结合使用时。您的用户可以执行以下操作:

git push origin branch1:<username>/branch1

将导致origin远程上的两个不同分支,即使它们在本地分配的分支名称相同。然后,这将允许每个用户git fetch其他用户分支也进行比较。除了一些特定的“众所周知的”分支名称(masterdevtest等...)之外,做这样的事情实际上是一个非常有用的工作流程。

答案 2 :(得分:0)

这两个用户实际上是在同一个分支上工作,因此应该适用所有限制。

这种合作的最佳实践在某种程度上是主观的。 喜欢的是在遥控器上重新设置我的工作,然后将一些提交的补丁推送到遥控器。

答案 3 :(得分:0)

通常情况下这应该没问题,因为无论用户 a b 的哪个订单推送,另一个订单都可以将它们拉出并合并在一起。这样:

usera$ git push

userb$ git pull
userb$ git push

将导致类似:

C1 -- C2 -- ... <master
       |\
       | a1 -- a2 -- a3          <user a branch
        \                >- ab4    <remote branch (merge commit)
         b1 -- b2 -- b3          <user b branch

用户 a b 在他们的本地主副本上工作,然后必须合并结果,这没有什么不同。

答案 4 :(得分:0)

第二个用户将拒绝推送,因为分支不是最新的。当他们检查他们的状态时,他们的状态会说分支已经分歧,他们在x提交前面,在y提交后面。 x提交将是自两个分支的公共合并基础以来的提交数。并且y提交将是第二个用户分支上不在推送分支上的那些。

第二个用户需要执行合并/ rebase操作才能在分支能够推送之前同步分支。这应该不是问题。