我们的老板最近决定尝试一个“增加容量”的外包小组,因为我们修改现有的应用程序以添加新功能。尽管我担心他所选择的小组似乎并没有很好地沟通,也没有提出足够的问题来真正理解和有效,但我们还是和他们一起去了。
我们将它们设置为在我们的Git存储库(托管在GitHub上)上进行协作。我们为他们创建了一个分支(TheOutsourcedBranch,我们称之为),并要求他们在这个分支中完成所有工作。
此外,我们要求他们在每天结束时推送他们的提交,这样我们就可以很好地了解他们的工作速度,以及(更重要的是)他们的代码有多好。
今天他们第一次推了推。五个提交,所有这些都是主人。我正在试图弄清楚如何将他们的提交从master转移到TheOutsourcedBranch,而不会丢失他们已经完成的工作(尽管从它的外观来看,无论如何我们都不得不扔掉它。)
橙色圆点是他们的提交,灰点是我的。
我知道有很多关于变基的问题(这可能是我在这里需要做的)但我很难弄清楚哪些适用于我的具体案例。如果重要的话,外包集团和我自己是现在唯一真正使用回购的人。
提前致谢!
修改 我可能找到了我要找的东西:Move the most recent commit(s) to a new branch with Git
但是,我想检查一下我的理解。在本地,我创建了一个主要的分支(TheOutsourcedBranch),它将包含所有A-H。然后我将master重置为C. Master现在包含A-C。假设这是正确的,那对我(本地)来说没问题。但是,我需要做些什么才能“强迫”远程存储库(GitHub)接受我当地对事物发生方式的看法并丢弃其历史版本?
一旦这个问题发生了,我想我可以重新解决这个问题,使其更具通用性/信息性,并减少一些毛病 - 否则它可能是一个很好的删除候选人,我猜。
答案 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
如果您对此有任何疑问,请与我们联系。它对我们很有用。