Git - 移动推送到不同的分支

时间:2012-01-31 21:01:12

标签: git github rebase git-rebase

我们的老板最近决定尝试一个“增加容量”的外包小组,因为我们修改现有的应用程序以添加新功能。尽管我担心他所选择的小组似乎并没有很好地沟通,也没有提出足够的问题来真正理解和有效,但我们还是和他们一起去了。

我们将它们设置为在我们的Git存储库(托管在GitHub上)上进行协作。我们为他们创建了一个分支(TheOutsourcedBranch,我们称之为),并要求他们在这个分支中完成所有工作。

此外,我们要求他们在每天结束时推送他们的提交,这样我们就可以很好地了解他们的工作速度,以及(更重要的是)他们的代码有多好。

今天他们第一次推了推。五个提交,所有这些都是主人。我正在试图弄清楚如何将他们的提交从master转移到TheOutsourcedBranch,而不会丢失他们已经完成的工作(尽管从它的外观来看,无论如何我们都不得不扔掉它。)

Visual Reference -- Orange dots are their commits, gray are mine.

橙色圆点是他们的提交,灰点是我的。

我知道有很多关于变基的问题(这可能是我在这里需要做的)但我很难弄清楚哪些适用于我的具体案例。如果重要的话,外包集团和我自己是现在唯一真正使用回购的人。

提前致谢!


修改 我可能找到了我要找的东西:Move the most recent commit(s) to a new branch with Git

但是,我想检查一下我的理解。在本地,我创建了一个主要的分支(TheOutsourcedBranch),它将包含所有A-H。然后我将master重置为C. Master现在包含A-C。

假设这是正确的,那对我(本地)来说没问题。但是,我需要做些什么才能“强迫”远程存储库(GitHub)接受我当地对事物发生方式的看法并丢弃其历史版本?

一旦这个问题发生了,我想我可以重新解决这个问题,使其更具通用性/信息性,并减少一些毛病 - 否则它可能是一个很好的删除候选人,我猜。

2 个答案:

答案 0 :(得分:47)

获得分支很简单:

git branch their-branch master
git reset --hard master $SHA1_OF_C
git push --force $SHARED_REPO_REMOTE

这将重写历史;它创建一个新的分支,它相当于名为their-branch的当前主分支,然后重置本地主分支以指向随机SHA1(...或分支,或标记,或其他),最后强制更新远程存储库分支以匹配您的本地分支。

完全你想要的情况。

警告:这将重写历史,并且可以搞砸任何已经建立旧主人的人。注意以下合并问题。

不需要或不需要变装。

(顺便说一句,我建议你给他们一个临时存储库,或者让他们使用git send-email,或者使用GitHub拉取请求,否则阻止他们推进掌握直到他们做对了。根据您的总结,可能需要一段时间。)

答案 1 :(得分:-1)

让他们从他们工作的每张票的同一起点为每一点工作分支。让他们将工作合并到RC分支。您可以将您的工作合并到RC分支。这将允许您经常测试。请参阅我们在此处的工作流程:

https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

如果您对此有任何疑问,请与我们联系。它对我们很有用。