使用 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" 您的分支使历史再次线性化。
我正在学习使用 Git,但是,我想保留 线性 的历史记录。我刚刚完成了我的第一个 feature 分支。
我现在准备将它合并到我的主分支中。
我知道正确的做法是重新设置功能分支或其他东西,然后合并它?无论哪种方式,都有一些合并过程,以便您保留提交历史记录或其他内容。
我的主分支叫做master。功能分支称为 import-publictalk-names.
发现这个问题:
所以我认为我已经设法正确地做到了并且可以关闭:
我想我现在已经按照自己的喜好成功完成了:
创建新分支时,基本上可以并行工作。但是,无论何时合并(如
当你的 master
分支上没有额外的提交时(参见图 1),正常的合并将产生一条直线,它与主分支上的任何提交都没有区别分支(主分支标签将只分配给功能分支提交,参见图 2)。如果你想在日志上看到一条平行线,它通过合并提交光学合并到主分支(一个提交有两个父而不是只有一个,参见图 3),你需要启用 "No fast forward" 合并选项。 - 如果在 master 分支上有一个并行提交,你总是会得到一个合并提交(除非你 select "fast-forward only")。 - 作为侧节点:图2和图3的文件内容完全相同,唯一不同的是git.
另外,有些人不喜欢您的屏幕截图中的提交在视觉上是交错的。从 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" 您的分支使历史再次线性化。