Git常用指令

前言

本文主要为了记录常用的几个命令的详细操作
主要详细记录以下几个命令

  • git merge
  • git rebase
  • git reset
  • git revert
1

===========================================================

一.Git Merge两种状态

===========================================================

image.png

如上图.我现在要在develop上把feature/test分支merge进来.
但是此时进行merge操作会产生两种节点状态.

状态一.Fast Forward Merge

image.png

直接使用merge命令
这样并不会产生新的commit节点.而是真的直接合并了两个分支.
仿佛他们是一个分支一样.如下图

image.png

状态二.加入—no-ff参数

image.png

但是如果在merge命令后面加上—no-ff参数.
git就会产生一个新的merge节点.如下图.

image.png

Git Merge 总结

如果不加上—no-ff这个参数.
在以后查看commit信息的时候会产生一定的困难.

困难一: 查询困难

以后查看merge的某个分支的时候.
不知道被merge的那个分支是从哪个commit开始的.

困难二: 以后revert操作困难

如果总包的时候.老板说某个需求不上了.
如果不加—no-ff参数
那你revert的时候就要一个一个commit去revert
而如果加上了—no-ff参数.
你就只需要revert那一个merge节点就可以了.

所以还是最好加上—no-ff参数.

===========================================================

二.Git Rebase三种操作

===========================================================

一.命令行操作git rebase

image.png

二.图形工具Tower操作

2.1.做备份(可以省略)

为了防止rebase丢失节点.可以在rebase操作前在当前分支开一个新分支做备份用.

如果你很自信.那就可以忽略这一步.

image.png
2.2.开始rebase
image.png
2.3.有冲突
image.png
2.4.解决冲突并继续rebase
image.png
2.5.所有commit都已rebase.并且没有冲突了.
image.png
2.6.强制push
image.png
2.7.rebase的基点变换
image.png

===========================================================

三.图形工具SourceTree操作

===========================================================

3.1.做备份(可以省略)

为了防止rebase丢失节点.可以在rebase操作前在当前分支开一个新分支做备份用.

如果你很自信.那就可以忽略这一步.

image.png
3.2.开始rebase

1.当前分支处于feature/rebase分支.

2.右击你要rebase的分支(develop)

3.选择rebase current changes onto develop

注意: 此时你rebase的是本地的develop分支.而不是远程的develop分支.

所以你要确保此时你本地的develop分支是最新的.

image.png
3.3.有冲突
image.png
3.4.解决冲突并继续rebase

解决完冲突后.选择Actions >>

image.png
3.5.所有commit都已rebase.并且没有冲突了.
image.png
3.6.强制push
image.png

如果你的push操作没有 Force push选项.如下操作可以打开此功能

image.png

===========================================================

四.Git Rebase合并多个commit

===========================================================

方式一

4.1.命令行操作

git rebase -i 7e9425f8b2faafc95aeac1115253b5198d2b3dbf

7e9425这个hash是你要修改的提交的父提交

image.png
4.2.当前我们只要知道 pick 和 squash 这两个命令即可

pick 的意思是会执行这个 commit

squash 的意思是这个 commit 会被合并到前一个commit

我们将 6490a10 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出

image.png
image.png
4.3.修改好commit后:wq保存退出即可
image.png
4.4.最后强行push即可

方式二

4.5.使用sourceTree操作
image.png

===========================================================

五.Git Reset

===========================================================

5.1操作步骤:

1.git reset 4d3d3b1
2.解决冲突commit
3.强制push即可.

reset 是把中间这5个commit都取消.
但是保留你reset到的那个commit的提交.

image.png

===========================================================

六.Git Revert

===========================================================

6.1.操作步骤:

1.git revert 4d3d3b1
2.解决冲突commit
3.push即可

revert只是取消某一个commit记录.
中间的commit都不会取消.
然后重新提交一个新记录.

image.png

推荐阅读更多精彩内容