【发布时间】:2014-07-08 02:04:48
【问题描述】:
如果我的符号或术语有误,我深表歉意。我在个人项目中使用git 已经有一段时间了,并且不必处理复杂的合并场景。我们开始在工作中使用它,并且遇到了更复杂的场景。我仍然是git 新手,所以我想找出樱桃采摘的最佳做法。
场景一
在这里,我们有一个 master、fix 和 develop 分支。在我们分支fix 之后,我们将版本号更新为1.0.1。我们对develop 做了同样的事情,并将版本号更改为1.1.0。
假设修复F1、F2 和F3 已提交给fix。其中,我们关心修复F2 和F3,但不关心F1,因为它是对已弃用功能的更改。我们也不关心版本号更改为1.0.1。
现在我们可以毫无问题地将这些更改从fix 合并回master。但是如果我想将这些更改合并到develop 中呢?现在我正在使用git cherry-pick 来挑选F1 和F2。此外,对于大量提交,我正在使用一系列提交来挑选,这似乎工作正常。这是最好的做事方式吗?
这让我想到了关于 git cherry-pick 的下一个场景:
场景 2
再次,如果术语不正确,或者我的图表没有意义,我深表歉意。这是我能形容的最好的了。
所以在这种情况下,除了上述分支之外,我们还有一个 hotfix 分支。假设有人将修补程序 H1 和 H2 提交到 hotfix,然后将这些更改合并到 master、fix 和 develop。
大约在同一时间,其他人将修复 F1、F2 和 F3 提交到 fix 分支,但以交错的方式提交(所以 F1 在 H1 之前提交,并且H2 是在 F3 之前提交的。现在处理 fix 的人想要同步,所以他运行了一个 git pull,这会将这些更改按顺序排列。让我们也假设没有冲突。
现在,假设这个人想要将他的所有修复合并到develop。在这种情况下,如果他使用git cherry-pick 和一系列从F1 的提交开始,到F3 的提交结束,会发生什么?这些合并会被忽略吗?据我所知,您无法挑选合并(因为您需要指定主线)。那么在这种情况下,git cherry-pick 会直接忽略这些合并吗?
另外,为了不必处理这种情况,总是 rebase 而不是 git pull 是否更好,以便之后应用您的更改?这样你就可以指定提交的范围,它不会包括合并。
谢谢,如果我的问题很愚蠢或没有任何意义,我深表歉意。
【问题讨论】:
-
这个问题的意见如何?
-
你用什么来制作图形?
-
我使用了一个名为yEd的工具。它是免费的,而且非常好。
标签: git version-control merge rebase cherry-pick