使用 TortoiseGit 正确合并功能分支

Correctly merging a feature branch using TortoiseGit

我正在学习使用 Git,但是,我想保留 线性 的历史记录。我刚刚完成了我的第一个 feature 分支

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

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

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

发现这个问题:

所以我认为我已经设法正确地做到了并且可以关闭:

我想我现在已经按照自己的喜好成功完成了:

创建新分支时,基本上可以并行工作。但是,无论何时合并(如 中所述),功能分支中的所有更改都会集成到当前分支中。此时你有一个同步点,它以某种方式将你的更改放入当前分支(master)的历史记录中。 - 以防万一文件在两个分支上都被编辑,可能会存在冲突,需要在额外提交以完成合并之前解决冲突。

当你的 master 分支上没有额外的提交时(参见图 1),正常的合并将产生一条直线,它与主分支上的任何提交都没有区别分支(主分支标签将只分配给功能分支提交,参见图 2)。如果你想在日志上看到一条平行线,它通过合并提交光学合并到主分支(一个提交有两个父而不是只有一个,参见图 3),你需要启用 "No fast forward" 合并选项。 - 如果在 master 分支上有一个并行提交,你总是会得到一个合并提交(除非你 select "fast-forward only")。 - 作为侧节点:图2和图3的文件内容完全相同,唯一不同的是git.

中的meta-data

另外,有些人不喜欢您的屏幕截图中的提交在视觉上是交错的。从 git 的角度来看,正常的合并是完全没问题的。但是如果你想有一个直线提交,你需要在你想要合并你的更改的分支之上重新设置你的功能分支(那么你就是图 1 的情况)。之后合并 rebased 分支(如 fast-forward 合并或非 fast-forward 合并)。


为了使您的历史线性化,"just" 通过将 master 重置为带有 "hard reset" 的最后一次提交(并行提交,参见图 4)来恢复合并。然后检查你的功能分支并将它重新设置在 master 之上(单击日志对话框中的 master 分支并单击 "Rebase ... on this..."。然后你有图片 1 的情况,你可以再次合并。


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

图 2. 使用默认选项将 reorder-commits 合并到 master(即 fast-forward 合并):

图 3. 使用 "non-fast-forward" 选项将 reorder-commits 合并到 master,请注意带有 "Merge branch ..." 消息的合并提交和两个父提交:

图 4. 通过(硬)将 master 分支重置到其旧位置,"reverting" 您的分支使历史再次线性化。