开发工具: git 06、粗粒度地比较不同分支之间差异

本文回顾了Git的核心概念,如工作区、暂存区和仓库,以及分支的原理。区分了`git log`和`git reflog`的用途,并详细介绍了如何使用Git比较不同分支之间的提交差异,涵盖多个具体情景,帮助开发者识别需要合并的commit,以保持分支同步,避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 核心回顾

  1. 三个区域(三棵树):工作区,暂存区,仓库

  2. 分支即指针:

  3. 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次
01
比较下和master分支之间差了多少个commit
02
确定无误后,最后合到master 中。

3.2 情景2

git log --abbrev-commit --oneline 分支名..master

上述命令可以看一下 master 分支有哪些 commit 是 feature/003 分支所没有的。

比如张三此时的 feature/002 分支的 commit log 是
03
在本地 master 分支上 pull 最新的代码,然后切换到 feature/002 分支。执行上述命令:
04
会发现 master上有好多的 commit,别人提交了而张三还没有提交。此时张三应该将 master 代码反过来 merge 到特性分支 feature/003 上去,让张三的特性分支的代码跟 master 分支的代码保持同步。
05

3.3 情景3

git log --abbrev-commit --oneline origin/master..HEAD

该命令可以看一下哪些本地 master 分支的 commit 需要被推送到远程仓库中去。

比如张三在本地的 master 上做了不少的提交和修改,可以看一看有哪些代码是还没有推送到远程仓库里去的
06
实际上,更常见的是在特性分支上输入此命令,比较和远程 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 是存在于两个分支中的某一个,但是不是两个分支都有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值