文章目录
1. 核心回顾
-
三个区域(三棵树):工作区,暂存区,仓库
-
分支即指针:
-
commit树
无论在哪个分支上做开发和提交,都是在这个项目公共的一个commit树上在添加不同的commit,形成一颗越来越长的树。分支只是指向某个commit的一个指针而已。然后每个commit就代表了那个时刻下项目的一个完整的历史快照版本
2. git log 和 git reflog 的区别
git log:只会显示当前 commit 之前的 commit 的信息。常用于回滚
git reflog:显示最近几个月,完整的一个 commit 历史。
3.比较不同分支之间差了哪些 commit 还没有合并
3.1 情景1
git log --abbrev-commit master..分支名
比如李四开发 feature/001 时拉了最新的 master 代码后,在本地 commit 了3次,然后中间突然停下来去做了另外一些事情,比如说去做其他的 feature 分支,或者是休假了。回来以后忘了自己跟 master 分支之间差了哪些代码。此时就可以使用此方法比较下当前 feature/001 分支比 master 分支落后了哪些 commit,是不是需要跟 master 保持一下同步,以避免大量的代码冲突。
李四在feature/001分支提交了3次
比较下和master分支之间差了多少个commit
确定无误后,最后合到master 中。
3.2 情景2
git log --abbrev-commit --oneline 分支名..master
上述命令可以看一下 master 分支有哪些 commit 是 feature/003 分支所没有的。
比如张三此时的 feature/002 分支的 commit log 是
在本地 master 分支上 pull 最新的代码,然后切换到 feature/002 分支。执行上述命令:
会发现 master上有好多的 commit,别人提交了而张三还没有提交。此时张三应该将 master 代码反过来 merge 到特性分支 feature/003 上去,让张三的特性分支的代码跟 master 分支的代码保持同步。
3.3 情景3
git log --abbrev-commit --oneline origin/master..HEAD
该命令可以看一下哪些本地 master 分支的 commit 需要被推送到远程仓库中去。
比如张三在本地的 master 上做了不少的提交和修改,可以看一看有哪些代码是还没有推送到远程仓库里去的
实际上,更常见的是在特性分支上输入此命令,比较和远程 master 之间的 commit 差距。以明白自己忘了推送多少个 commit 到远程仓库的 feature 分支去。
3.4 情景4
git log --abbrev-commit --oneline feature/001 feature/002 --not master
可以查看在几个分支中都有的 commit,但是在 master 分支中还没有。
3.5 情景5
git log --abbrev-commit --oneline feature/001...feature/002
可以查看哪些 commit 是存在于两个分支中的某一个,但是不是两个分支都有的