我正在寻找一种方法来使用主题分支来创建功能开发的详细历史记录(以及进行中的备份),并将合并提交用作主要功能,作为功能添加的摘要描述。好的,你可以在两个方向合并使用--no-ff
,这就是你得到的,对吧。当您尝试推送并发现其他人已将更改推送到掌握时,就会出现问题。
从我发现的情况来看,您现在的选择是:(a)将您当地的主人副本换成' over'这些其他更改或(b)将这些更改合并到您的本地主副本中,然后推送。选项(a),变基,有点乏味,并以一种模糊事件顺序的方式重写历史。选项(b),正常合并,导致历史图表模糊了主题分支与“主线”的身份。 (具体来说,git log --first-parent
并不是指上游大师的负责人。)
我想避免这两种结果,我认为只需要进行一些小的(可预测的)改变。我认为问题只是git将当前分支设置为合并的第一个父级。合并两个本地分支时,这是有道理的。但是,当将当前上游分支合并到本地时,这是向后的。那么如何知道它是上游分支?那就是跟踪分支的用途,对吗?您甚至可以使用名为--set-upstream
的选项分配它们。
所以......
修改
我对这个问题的原始起始案例并不是一个明确的主题分支,但是代表半平凡变化的单个提交仍然值得分享回主线'。我希望解决方案可以扩展到作为多个步骤(一个实际的主题分支)开发的变更集,并且这个案例似乎更清楚地描述了意图,因此我将其用作描述。不幸的是,在发现冲突之前创建合并提交会使事情变得复杂(正如@Chris所指出的那样)。
对于这个更简单的案例,我仍然对(1)和(2)的答案感兴趣(并且如果可以解决更简单的案例,我将编辑问题,并且我会弄清楚如何给予那些已经回答了。)
答案 0 :(得分:1)
您可以中止合并并使用新的master
重做它。假设您在master
并且推送合并失败了,您可以执行以下操作:
$ git reset --hard origin/master # reset to newly-fetched master
$ git merge topic_branch # redo the merge
$ git push origin HEAD # re-push the merge
如果初始合并中没有冲突,那么没什么大不了的。否则你需要重做这项工作。要避免这种乏味,请参阅git rerere。
针对您的具体问题:
master
未能推送的版本)合并到新获取的master
比在另一个方向合并更清晰,但它仍然引入了无意义的合并。重做合并可以创造更清晰的历史。git merge
合并到当前分支中,因此只需检查您希望成为第一个父级的内容。为避免拒绝推送,请确保在合并之前从master
拉出。