git cherry命令中前缀"+"与"-"的含义是什么?
理解
git cherry中的"+"和"-"前缀 先明确git cherry的核心用途:帮你对比当前分支(或指定的head范围)和上游分支(<upstream>),找出哪些提交已经在上游有等效内容,哪些还没有。
前缀含义拆解
-前缀:这个提交的代码变更内容,已经在<upstream>分支里存在完全等效的提交了。
这里的「等效」不是指提交SHA1相同——毕竟你可能用git cherry-pick复制提交,或者变基后提交SHA1变了,但代码改动是一样的。Git是通过对比提交的补丁内容(也就是git diff的结果)来判断的,只要内容一致,就会标-。+前缀:这个提交的代码变更,在<upstream>分支里找不到任何内容完全匹配的提交,属于当前分支独有的改动,还没被合并或复制到上游。
实际场景例子
比如你在feature/login分支开发,上游是main分支:
- 你在
feature/login提交了三个改动:A(修复输入框样式)、B(添加验证码逻辑)、C(优化登录提示) - 后来把B提交用
git cherry-pick复制到了main分支上线 - 运行
git cherry main,输出会是:
这里B标了+ a1b2c3d 修复输入框样式 - d4e5f6g 添加验证码逻辑 + g7h8i9j 优化登录提示-,因为它的改动已经在main里了;A和C标+,说明这两个改动还没同步到上游。
补充说明
git cherry默认对比的是limit..head范围(默认limit为上游分支,head为当前分支最新提交),你也可以手动指定范围,比如git cherry main v1.0,就是对比v1.0标签之后到当前HEAD的提交和main分支的差异。
内容的提问来源于stack exchange,提问作者Skörven
相关产品推荐
相关产品推荐

