git常用命令看图说话
1.实例概要
结合github实例来分析常用操作:git log、git reset、git revert、git merge、git checkout
repositories地址:https://github.com/jmingzi/mvvm.git
分支结构
git branch
* master
01
02
实例说明:在实际的项目中多人开发,或者说多个需求不同排期开发的时候,就会遇到分支很多的情况,难免出错。我们需要在出错之后,能够分析出错的信息以及回滚代码。
2.git log
在项目中运行git log
// 最近的一次提交
commit af9b7c22c8d4f0f97f2e40e7c348c6c51fc0c4df (HEAD -> master, tag: first_tag, origin/master, origin/HEAD)
// 合并的2个分支在下面可以找到
Merge: d3ae5c5 07f47b0
Author: yangming <472102644@qq.com>
Date: Fri Jul 6 09:36:53 2018 +0800
resolve conflicts
commit 07f47b0761a418ea29b29a3471048ec5f4db06bf (01)
Author: yangming <472102644@qq.com>
Date: Fri Jul 6 09:35:49 2018 +0800
add 01.js
// 这是一个回滚操作
commit d3ae5c5f484f3e8ef20dd3773c1c7e671609408b
Author: yangming <472102644@qq.com>
Date: Fri Jul 6 09:34:02 2018 +0800
Revert "change readme.md"
// 回滚到f9cf5c10b
This reverts commit f9cf5c10b568043ac3fd9c080758f02f81d24d52.
commit 8732fc69ed0fd52c0023a5ab70012a71eac9b8cc
Merge: f9cf5c1 8268d84
Author: yangming <472102644@qq.com>
Date: Fri Jul 6 09:32:51 2018 +0800
Merge branch '02'
commit 8268d8463c25533076a0191baaf17962b6b17ec4 (02)
Author: yangming <472102644@qq.com>
Date: Fri Jul 6 09:32:38 2018 +0800
add 02.js
commit f9cf5c10b568043ac3fd9c080758f02f81d24d52
Author: yangming <472102644@qq.com>
Date: Thu Jul 5 19:32:20 2018 +0800
change readme.md
commit 762866e7d1c293e73655a8364ed05f5357b6527a
Author: yangming <472102644@qq.com>
Date: Mon May 21 23:27:20 2018 +0800
demo
在git log
中,我我们可以看到很多基本信息,我们可以简化信息输出
git log --oneline --decorate
简化后
af9b7c2 (HEAD -> master, tag: first_tag, origin/master, origin/HEAD) resolve conflicts
07f47b0 (01) add 01.js
d3ae5c5 Revert "change readme.md"
8732fc6 Merge branch '02'
8268d84 (02) add 02.js
f9cf5c1 change readme.md
762866e demo
3.git checkout
我们一般用git checkout
来切换分支,加上-b
参数是新建分支,加上-D
是删除本地分支
它还有另外一个作用,用来查看以往分支的内容。场景是,当我们需要回顾项目以往版本的代码时,可以随时切换回去。
git checkout commit_id/tag
例如以上项目
git checkout 8732fc6
会提示你,当前git的工作区指向一个新的暂存分支(8732fc6),分支名称就为commit_id,还提示你如果想创建新分支就加-b
参数。
我们再来查看分支
说明此时确实新建了一个分支用来查看commit_id为8732fc6的代码,那么我们同样可以切换分支切换回去。
切换分支后,再查看分支列表发现那个新建的分支确实是暂存的。
4.git reset、git revert
他们的区别在于是否保存回滚分支的记录,在很多时候,我们都希望任何操作记录是被记录的,那样都可以回滚,所以任何时候都是推荐使用revert的。
git revert回滚时做了2件事情
- 回滚你的代码
- 新建一个commit记录来记录本次回滚
git reset回滚时也做了2件事情
- 回滚你的代码
- 清除了回滚中间的commit记录
git reset支持添加参数
- --soft – 缓存区和工作目录都不会被改变
- --mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
- --hard – 缓存区和工作目录都同步到你指定的提交
git revert举例: 还是上面的例子,有三个分支master, 01, 02
,我们会过去看第二条记录add 01.js
,我们可以查看本次提交的代码内容
git checkout 07f47b0
我们可以发现修改了02.js
文件,此时我们切换到02分支,也同时修改这个文件 ,然后合并到master再提交。
查看log,新增了2条记录
此刻,我们再回滚到上面说到的第二条记录add 01.js
发现回滚时产生冲突了,因为我们同时修改了同一个文件,那出现这种情况怎么办呢?
可以使用git revert --abort
取消本次回滚,也可以在解决冲突后git revert --continue
完成本次回滚。
此时git status
提示,在该版本上02.js
被它们删除了,也就是说这个版本上还不存在02.js
,所以冲突了。
所以你需要删除它,然后运行git revert --continue
显示回滚成功。