使用TortoiseGit正确合并功能分支

时间:2017-01-22 18:18:52

标签: tortoisegit

我正在学习使用Git,但是,我希望保持线性看历史。我刚刚完成了我的第一个功能分支

我现在准备将它合并到我的主分支中。

我知道这样做的正确方法是重新设置功能分支或其他内容然后合并它?无论哪种方式,都有一些合并过程,以便您保留提交历史记录或其他内容。

我的主要分支叫做主人。功能分支称为 import-publictalk-names

发现这个问题:

Merging code branch to master using tortoisegit

所以我认为我已经成功地做到了这一点并且可以关闭:

Merge Results

我想我现在已经成功地完成了这件事:

Merge results

1 个答案:

答案 0 :(得分:6)

当您创建新分支时,您基本上可以并行工作。但是,无论何时合并(如https://stackoverflow.com/a/38203822/3906760中所述),功能分支中的所有更改都将集成到当前分支中。此时,您有一个同步点,它以某种方式将您的更改放入当前分支(主)的历史记录中。 - 为了防止在两个分支上编辑文件,可能会发生冲突,需要在额外提交之前重新完成合并。

当您在master分支上没有额外提交时(参见图1),正常合并将产生一条直线,该直线不会与主设备上的任何提交不相容branch(主分支标签将被分配给功能分支提交,参见图2)。如果你想在日志上看到一个平行线,它通过合并提交光学合并到主分支中(一个提交有两个父节点而不是一个父节点,参见图3),你需要启用"没有快进"合并选项。 - 如果主分支上有并行提交,您将始终获得合并提交(除非您选择"仅快进")。 - 就像一个侧节点:文件在图2和图3中具有所有相同的内容,唯一的区别在于git中的元数据。

此外,还有一些人不喜欢这些提交在屏幕截图中以视觉方式交错。从git的角度看,正常的合并完全没问题。但是如果你想要一个straigt提交行,你需要在你想要合并你的更改的分支顶部重新设置你的功能分支(那么你是图1的情况)。合并之后的重新分支(作为快进合并或非快进合并)。

为了使你的历史变得线性,"只是"通过使用"硬重置"将master重置为最后一次提交(并行的,参见图4)来恢复合并。然后检查你的功能分支并在主服务器上重新设置它(在日志对话框中单击主分支,然后单击" Rebase ...在此..."。然后你有图1的情况你可以再次合并。

图片1. reorder-commits分支上的简单开发,master上没有并行提交:

enter image description here

图片2.使用默认选项(即快进合并)将reorder-commits合并到master中:

enter image description here

图片3.将reorder-commits合并到master并使用"非快进"选项,注意合并提交与"合并分支......"消息和两个父提交:

enter image description here

图片4.通过"还原"再次使历史成为线性的你的分支(硬)将master分支重置为原来的位置。

enter image description here