4

所以,我一直在使用git cherry-pick它,但它变得很麻烦,我想知道是否有更简单的方法(或另一种方法)。

假设我有 3 个分支:(master稳定,生产候选)、develop(工作分支)和production.

现在,除了稳定的里程碑之外,production还有一些特定于生产的设置。每次我融入它时我不想改变的东西。我不能简单地合并developmaster,然后再到,也不能直接到master,因为这会与生产设置产生冲突。productiondevelopproduction

到目前为止,发行git cherry-pick commitA^..commitB已经production奏效,但我不想每次都这样做。

我错过了一些明显的东西吗?有没有更简单的方法来合并单个分支的提交

4

2 回答 2

3

在我看来,您应该看看Git Attributes。创建一个.gitattributes包含如下行的文件:

settingsfile merge=ours

这将阻止settingsfile被合并覆盖。而不是冲突,这将通过接受文件的当前状态静默解决合并。

有关更多详细信息,请参阅有关如何创建自定义合并驱动程序的答案

于 2013-05-26T15:19:51.057 回答
3

考虑为开发和生产环境使用单独的设置文件

cherry-pick通常是仅将特定提交合并到开发线中的最佳和最简单的选择。如果您必须不断地cherry-pick从您的开发分支提交到master/release 分支,而不是使用通常的merge命令,只是为了避免覆盖设置文件,您可能需要考虑让一些生成的设置文件的生产、部署版本部署期间的脚本类型,和/或为您的开发和生产环境提供单独的设置文件,例如dev.settingsproduction.settings.

替代品cherry-pick

您也可以cherry-pick通过使用rebase --onto或使用补丁来实现与 a 相同的效果,但rebase --onto如果您只是尝试选择单个提交,使用可能会更麻烦,并且使用补丁需要更多步骤。

rebasevscherry-pick选择一个提交

举个例子来说明rebase --onto有时 vs.有多麻烦,假设你在一个分支cherry-pick上有以下提交:develop

               develop
A <- B <- C <- D

假设您只想合并C到您的master分支中。使用cherry-pick,您只需使用它(在 上时master

git cherry-pick C

然而,要选择一个提交rebase --onto,你需要去

git rebase --onto master B C

有了上面的内容,您是说您想使用 的当前位置master作为新的基础提交/父级C,并且B是旧的基础/父级。

rebasevscherry-pick选择一系列提交

但是,在两个命令之间选择一系列提交变得非常相似。例如,假设您要合并BC。然后

git cherry-pick A..C
git rebase --onto master A C

是等价的,虽然cherry-pick需要在master签出时完成,但rebase --onto不会,因为它会master为您签出。

使用补丁

如果您想了解使用补丁需要做多少工作,您可以在Pro Git 书籍中阅读有关使用它们的信息。

于 2013-05-26T16:09:20.107 回答