在开发项目的时候，会因为经常操作不断的提交，产生很多的分支，后期不利于回滚数据，下面的方式就可以将分支多个合并：1、查看提交历史，–oneline -20最近20次提交，每次提交显示一行摘要git log --oneline -20 该命令可以展示出最近20条的分支历史，具体根据实际情况修改。2、合并提交历史#合并前5个提交 git rebase -i HEAD~5 #合并到某个提交 git rebase -i 0b26a0f775 上面的命令可以2选1，根据实际情况选择3、编辑合并规则pick 0b064204 最终修改 s c1ad1218 修改文件2 s e4e4034f 创建文件1 s 6e492400 删除文件3 # Rebase be4a2d33..6e492400 onto 6e492400 (4 commands) 【将be4a2d33..6e492400重新设定为6e492400（4个命令）】 # Commands: # p, pick <commit> = use commit【使用commit】 # r, reword <commit> = use commit, but edit the commit message【使用commit，但编辑commit消息】 # e, edit <commit> = use commit, but stop for amending【使用commit，但停止修改】 # s, squash <commit> = use commit, but meld into previous commit【使用commit，但合并到上一个commit中】 # f, fixup <commit> = like "squash", but discard this commit's log message【和squash一样，只是丢弃commit的日志消息】 # x, exec <command> = run command (the rest of the line) using shell【run command（行的其余部分）using shell】 # b, break = stop here (continue rebase later with 'git rebase —continue')【在此处停止（稍后使用“git rebase --continue”继续重新base）】 # d, drop <commit> = remove commit【删除commit】 # l, label = label current HEAD with a name【用名称标记当前头部】 # t, reset = reset HEAD to a label【将头部重置为标签】 # m, merge [-C <commit> | -c <commit>] [# <oneline>] create a merge commit using the original merge commit's message (or the oneline, if no original merge commit was ). Use -c <commit> to reword the commit message.【使用原始合并提交的消息创建合并提交（如果没有原始合并提交，则为oneline）。使用-c<commit>重新编写commit消息。】 # These lines can be re-ordered; they are executed from top to bottom. # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # Note that empty commits are commented out #这些行可以重新排序；它们从上到下执行。如果在此处删除一行，则提交操作将丢失。但是，如果删除所有内容，则将中止重新平衡。注意，空提交被注释掉了 编辑合约规则，主要看最上面的分支，编辑前你会看到很多的pick xxx这样的数据，第一个就是最后合并的分支，不动，后面的分支都改成s（即表示需要合并的分支）。TIPS：编辑时先按c进入编辑模式，编辑完成之后，按ESC退出，输入:wq 保存并退出，保存并退出之后会进入下一个编辑界面，一样保存并退出即可4、强制提交git push -f 强制提交至远程即可5、可能遇到的问题如果意外退出这个合并，可以使用下面的命令清除合并，重新开始合并操作git rebase --abort
1、Git vs SVNGit是分布式的，SVN是集中式的这是 Git 和 SVN 最大的区别。若能掌握这个概念，两者区别基本搞懂大半。因为 Git 是分布式的，所以 Git 支持离线工作，在本地可以进行很多操作，包括接下来将要重磅推出的分支功能。而 SVN 必须联网才能正常工作。Git复杂概念多，SVN简单易上手所有同时掌握 Git 和 SVN 的开发者都必须承认，Git 的命令实在太多了，日常工作需要掌握add,commit,status,fetch,push,rebase等，若要熟练掌握，还必须掌握rebase和merge的区别，fetch和pull的区别等，除此之外，还有cherry-pick，submodule，stash等功能，仅是这些名词听着都很绕。在易用性这方面，SVN 会好得多，简单易上手，对新手很友好。但是从另外一方面看，Git 命令多意味着功能多，若我们能掌握大部分 Git 的功能，体会到其中的奥妙，会发现再也回不去 SVN 的时代了。Git分支廉价，SVN分支昂贵在版本管理里，分支是很常使用的功能。在发布版本前，需要发布分支，进行大需求开发，需要 feature 分支，大团队还会有开发分支，稳定分支等。在大团队开发过程中，常常存在创建分支，切换分支的需求。Git 分支是指针指向某次提交，而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速，且创建成本非常低。而且 Git 有本地分支，SVN 无本地分支。在实际开发过程中，经常会遇到有些代码没写完，但是需紧急处理其他问题，若我们使用 Git，便可以创建本地分支存储没写完的代码，待问题处理完后，再回到本地分支继续完成代码。