强烈建议大家使用git rebase,附操作示例

310 阅读4分钟

Git是现代软件开发中最受欢迎的版本控制系统之一,而Git Rebase和Git Merge是两种常用的分支合并策略。Git Rebase很强大,但它并不适用于所有情况,在特定的场景中,使用Git Rebase可以发挥其优势,提高开发效率和代码质量。本文将介绍Git Rebase的最佳实践,包括合并公共分支、修复冲突和保持分支整洁等特定场景下的应用。

rebase

合并公共分支

当你在功能分支上开发新功能时,经常需要将公共分支(如主分支)的最新代码合并到你的分支上。使用Git Rebase可以将你的分支基于公共分支进行重演,使得你的分支上的提交历史更加清晰和线性。

通过使用Git Rebase,你可以将公共分支上的新提交逐个应用到你的分支上,而不是创建一个新的合并提交。这样可以保持提交历史的整洁,并使得代码审查和回滚操作更加方便。

假设你的功能分支(feature)基于主分支(master)进行开发,主分支上有新的提交。使用Git Rebase可以将你的功能分支基于主分支进行重演,而不是使用Git Merge创建一个新的合并提交。

使用Git Merge的示例:

A---B---C---D---E---F  (master)
     \
      G---H---I  (feature)

使用Git Rebase的示例:

A---B---C---D---E---F  (master)
                 \
                  G'---H'---I'  (feature)

通过使用Git Rebase,你可以保持提交历史的清晰和线性,更容易进行代码审查和回滚操作。

修复冲突

在多人协作开发中,可能会出现分支之间的冲突。当你需要解决冲突时,使用Git Rebase可以提供更直观和可控的方式。

通过使用Git Rebase,你可以在冲突发生的提交上进行冲突解决,而不是在合并提交上解决冲突。这样可以保持提交历史的清晰,并且更容易定位和解决冲突。

假设你在合并分支时遇到了冲突,需要解决冲突并合并代码。使用Git Rebase可以提供更直观和可控的方式来解决冲突。

使用Git Merge的示例:

A---B---C---D---E---F  (master)
     \           \
      G---H---I---J  (feature)

使用Git Rebase的示例:

A---B---C---D---E---F  (master)
                 \
                  G'---H'---I'---J'  (feature)

通过使用Git Rebase,你可以在冲突发生的提交上进行冲突解决,而不是在合并提交上解决冲突。这样可以保持提交历史的清晰,并且更容易定位和解决冲突。

保持分支整洁

在长期开发的项目中,分支结构可能会变得复杂和混乱。使用Git Rebase可以帮助你保持分支整洁和简洁。

通过使用Git Rebase,你可以将多个提交整合到一个提交中,减少分支结构的复杂性。这样可以提高代码的可读性和维护性,并减少潜在的冲突和错误。

假设你在长期开发的项目中有许多功能分支,并且分支结构变得复杂和混乱。使用Git Rebase可以帮助你保持分支整洁和简洁。

使用Git Merge的示例:

                 M---N---O  (feature1)
                /
A---B---C---D---E---F---G  (master)
         \
          H---I---J  (feature2)

使用Git Rebase的示例:

A---B---C---D---E---F---G  (master)
                 \
                  H'---I'---J'  (feature2)
                           \
                            M'---N'---O'  (feature1)

通过使用Git Rebase,你可以将多个提交整合到一个提交中,减少分支结构的复杂性。这样可以提高代码的可读性和维护性,并减少潜在的冲突和错误。

merge与rebase

merge

如果需要保留分支的完整历史记录,并且合并的提交顺序不重要,可以使用merge

rebase

如果希望将当前分支的提交整理成一个干净的、线性的历史记录,可以使用rebase

merge和rebase对比图

WechatIMG1048.jpeg

rebase的价值点

● 清晰的提交历史

● 减少合并次数

● 简化分支结构

rebase的风险点

● 潜在的数据丢失:需要小心处理冲突,确保不会丢失任何重要的更改

● 改变提交历史:如果多个开发人员在同一个分支上进行rebase操作,可能会导致提交历史的混乱和冲突。

rebase注意事项

● 不推荐在公共分支上使用rebase,比如master

展示示例

1、  保证本地v1.0.0为最6、新代码,执行git pull

2、  git checkout feat/data_range

git rebase v1.0.0

1WechatIMG1049.png

3、解决完当前commit冲突,执行git rebase --continue

2WechatIMG1050.png

4、继续处理冲突,重复上一步骤(注:冲突解决是逐个commit去解决的)

3WechatIMG1051.png

5、检查远程仓库与本地仓库commit差异,执行git push -f 强推覆盖远程仓库feat/data_range分支代码

4WechatIMG1052.png

6、最终效果

5WechatIMG1053.png