前言
本文主要为了记录常用的几个命令的详细操作
主要详细记录以下几个命令
- git merge
- git rebase
- git reset
- git revert
===========================================================
一.Git Merge两种状态
===========================================================
如上图.我现在要在develop上把feature/test分支merge进来.
但是此时进行merge操作会产生两种节点状态.
状态一.Fast Forward Merge
直接使用merge命令
这样并不会产生新的commit节点.而是真的直接合并了两个分支.
仿佛他们是一个分支一样.如下图
状态二.加入—no-ff参数
但是如果在merge命令后面加上—no-ff参数.
git就会产生一个新的merge节点.如下图.
Git Merge 总结
如果不加上—no-ff这个参数.
在以后查看commit信息的时候会产生一定的困难.
困难一: 查询困难
以后查看merge的某个分支的时候.
不知道被merge的那个分支是从哪个commit开始的.
困难二: 以后revert操作困难
如果总包的时候.老板说某个需求不上了.
如果不加—no-ff参数
那你revert的时候就要一个一个commit去revert
而如果加上了—no-ff参数.
你就只需要revert那一个merge节点就可以了.
所以还是最好加上—no-ff参数.
===========================================================
二.Git Rebase三种操作
===========================================================
一.命令行操作git rebase
二.图形工具Tower操作
2.1.做备份(可以省略)
为了防止rebase丢失节点.可以在rebase操作前在当前分支开一个新分支做备份用.
如果你很自信.那就可以忽略这一步.
2.2.开始rebase
2.3.有冲突
2.4.解决冲突并继续rebase
2.5.所有commit都已rebase.并且没有冲突了.
2.6.强制push
2.7.rebase的基点变换
===========================================================
三.图形工具SourceTree操作
===========================================================
3.1.做备份(可以省略)
为了防止rebase丢失节点.可以在rebase操作前在当前分支开一个新分支做备份用.
如果你很自信.那就可以忽略这一步.
3.2.开始rebase
1.当前分支处于feature/rebase分支.
2.右击你要rebase的分支(develop)
3.选择rebase current changes onto develop
注意: 此时你rebase的是本地的develop分支.而不是远程的develop分支.
所以你要确保此时你本地的develop分支是最新的.
3.3.有冲突
3.4.解决冲突并继续rebase
解决完冲突后.选择Actions >>
3.5.所有commit都已rebase.并且没有冲突了.
3.6.强制push
如果你的push操作没有 Force push选项.如下操作可以打开此功能
===========================================================
四.Git Rebase合并多个commit
===========================================================
方式一
4.1.命令行操作
git rebase -i 7e9425f8b2faafc95aeac1115253b5198d2b3dbf
7e9425这个hash是你要修改的提交的父提交
4.2.当前我们只要知道 pick 和 squash 这两个命令即可
pick 的意思是会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit
我们将 6490a10 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出
4.3.修改好commit后:wq保存退出即可
4.4.最后强行push即可
方式二
4.5.使用sourceTree操作
===========================================================
五.Git Reset
===========================================================
5.1操作步骤:
1.git reset 4d3d3b1
2.解决冲突commit
3.强制push即可.
reset 是把中间这5个commit都取消.
但是保留你reset到的那个commit的提交.
===========================================================
六.Git Revert
===========================================================
6.1.操作步骤:
1.git revert 4d3d3b1
2.解决冲突commit
3.push即可
revert只是取消某一个commit记录.
中间的commit都不会取消.
然后重新提交一个新记录.