应该用什么git命令为PR准备一个分支?

问题描述:

嘿,我有一个感觉非常简单的问题,但我无法绕过它,试图找到答案会导致很多类似但又微妙不同的问题的答案。应该用什么git命令为PR准备一个分支?

我一直在研究一个旧的分支关闭功能,而其他团队成员管理一个巨大的拉。现在他们完成了,我需要让我的功能准备好提出请求。

我需要从我的分支(它跨越10-15次提交的3-4个文件)进行相关更改,并将它们与主站中的大量更改集成在一起(分布在几十个或几百个文件中)的承诺)。我的版本的文件和版本之间会发生合并冲突,但它们很容易解决。什么是传统的方式来抓住我的分支(或建立一个结合主+旧分支的新分支)并解决冲突?我开始进行重组,但最终不得不解决了叉子以来发生在主人身上的每一次提交,这似乎完全没有必要和耗时。

谢谢!

+1

要么将​​主人合并到您的分支,要么将您的分支重新分配到主人。 – knittl

+0

使用提交创建补丁并应用于新分支 – MaNKuR

这样做的典型方法是将git pull master放入分支并解决冲突。然后git push你的分支。这对于拉动请求来说很少令人头痛。

+0

这不会导致必须对很多与我在分支中所做更改无关的文件进行排序吗? – gewl

+0

Git会自动合并所有不是冲突的东西,但是,您需要提交它们。没有办法解决这个问题,除非你的pull请求处理选择了文件。 – TriskalJM

+0

看起来很迂回 - 在〜100个文件中存在合并冲突,但我只想处理其中的3个文件。在所有其他情况下,我想要顺从主人。有没有更直接的方式来做到这一点? – gewl

由于TriskalJM stated通常的做法是将git pull master放入你的分支,然后git push然后PR。但是,正如您所说,在您的使用案例中,rebase可能会让您以每次提交为基础处理冲突。我建议您根据实际结果检查一些方法。

我认为合理处理master分支和旧功能分支的合并是分开对旧功能进行新修改的结果。为此,您可以试着挑选您在功能分支上对主设备所做的更改(或者更好地从主设备创建一个新分支,对其进行樱桃挑选,然后合并,然后结果进行检查,以隔离它)。如果这对你更加清晰,也可以尝试,而不是:

  1. 从特征做一个新的分支但从最后的更改之前提交。我们称之为feature1。与合并,处理冲突。
  2. Cherrypick 您的提交从功能feature 1
  3. 检查结果并发布到master

对于merge与功能分支,你可以检查一个选项是,在第一来给你简单rebase方法有效了。我所指的是mergerebase命令的strategy选项。

使用git rebase ... -s recursive -X theirs势力冲突的帅哥是自动解决通过支持他们的版本干净”(即theirs = master在这种情况下)。

注1:注意,可能是在文档有点混乱,存在一个名为ours合并战略,并称为递归的选项的战略要求ours(或theirs在我的建议)。 git merge ... -s ours <>git merge ... -s recursive -X ours