1、打印输出git分支图
git log --graph --all --decorate --oneline
--graph意思是以图形的模式显示分支,
--all意思是显示所有的commit记录,
--decorate参数用来显示一些相关的信息,如HEAD、分支名、tag名等,
--oneline就是一个commit只显示一行
2、Merge branch 'master' of
我们某些时候会见到 Merge branch 'master' of into... 的日志,如下图,会多一个绿色的箭头指向,那这是如何造成的呢?为啥会出现这种呢?
答:我们在同一个分支上进行多人协同开发时,本地分支的代码落后于远程分支是很常见的事,如果你按照正常流程,先 git pull,有冲突解决冲突,然后git add/commit/push,那么你的git操作没有问题,非常完美,git分支图也是正常显示。但是你如果先 git commit,再 git pull的话,就会产生 Merge branch 'master' of 这种多余日志,虽然不会影响啥,但是分支图多一处无用的日志就很不好, 而且 先git add再git pull也非正常流程。
2.1、那么有同学想问,我对git不太熟悉,又和同事在同一个分支上开发,那我该如何操作呢?
首先你和同事修改有同样代码,然后他讲代码提交到远程了,你需要拉取他的代码,但是因为你本地有正在开发的代码,无法git pull,那切记一定不要先git commit! 要先 git stash , 将你本地开发代码提交到本地暂存区(可以跨分支哦,这方式很好用),然后git pull,拉下别人的代码后,再 git stash pop,将你代码从暂存区退出到本地开发目录,然后就是解决冲突,接着 再是git add/commit/push啦
2.2、git pull 原理是啥?
我们在git pull代码时,实际上git 默认会帮我们做合并操作: fast-forward 模式, 意思是如果 远程 分支超前于本地分支,并且本地分支没有任何 commit 的,直接从 远程 进行 pull 操作,这种模式下,不会产生合并节点,也就是说不会产生多余的日志信息(Merge branch 'master' of ...)。
如果像之前那样,本地先 commit 后再去 pull,那么远程分支和本地分支会出现分叉,这个时候使用 pull 操作拉取时,就会进行分支合并,产生合并节点日志信息