背景是平时分支之间经常互相合并,我想要单独看一下在当前分支上的 commits log,没有找到对应的子命令?倒是找到一个--no-merges 选项,但是它只能把合并代码时新生成的 merge commit 去掉,不能把从别的分支上 merge 过来的 commit 去掉
1
AlisaDestiny 2018-12-03 18:09:30 +08:00
|
2
0xABCD OP @AlisaDestiny 感谢回复,我搜到过这个答案,跟我描述的不符,他答案中提到的两个分支没有合并过,他是从 master 切出来的分支,然后比如有 3 个提交,他想找出来的是这 3 个新增的提交,而我的问题是,两个互相合并过的分支怎样才能找出最初在本分支上的提交,不包含 merge 过来的。比如 A 分支有 commit a,B 分支有 commit b,现在他俩一合并,那么 A 分支就有了 commit b,这时我怎么才能只过滤出 commit a,即一开始就是在 A 分支的 commit
|
3
hzwjz 2018-12-03 19:34:06 +08:00
|
4
dbolo123 2018-12-03 19:55:13 +08:00 via Android
这样呢?假设有 b1,b2,b3 只看 b1 的,git log b1 ^b2 ^b3
|
6
SoloCompany 2018-12-03 23:17:18 +08:00
> 两个互相合并过的分支怎样才能找出最初在本分支上的提交
你是指这个? git log B..A |
7
0xABCD OP @hzwjz #3 仔细读完了你贴的链接,好像很接近我想要的了,我有个疑惑,这里的--first-parent 指的是哪个分支,假如有两个分支 dev 和 feature-1。有的时候是 feature-1 merge 到 dev,有的时候又是 dev merge 到 feature-1,那么 feature-1 分支上就会有这两种 merge commit (最终也会从 dev 拉到 feature-1 ),git 在这种情况下,--first-parent 应该指的是谁呢?
|
8
0xABCD OP @SoloCompany #6 不是,你说的这个命令区分不出**已经相互合并**的两个分支的提交,因为两个分支的 commit 已经相同了,git log B..A 的意思是找出在 A 分支上但是不在 B 分支上的 commits
|
9
SoloCompany 2018-12-04 00:16:51 +08:00 via iPad
那你可能想找的是 — no-merges
|
10
SoloCompany 2018-12-04 00:20:25 +08:00 via iPad
发早了,请忽略
应该是说 — first-parent 所有的 merge parent 其实是有顺序的,你没有办法指定选择一个图里面的多条路径里面的一条,只能都选最左或最右 |
11
0xABCD OP @SoloCompany #10 可是最左或者最右策略可能无法保证 first-parent 始终是同一个分支,那我只想看某个分支上的提交就无法实现了?
|
12
SoloCompany 2018-12-04 00:32:09 +08:00 via iPad
你的理解就是错误的,一个分支的所有历史并不是线性的,而是多路径的,不存在你说的一个分支所对应的唯一路径
a merge b 的结果是 c 那么多 a 和 b 都同时属于 c 所在的分支,a 和 b 只有路径的区分(左还是右,或者说 1 还是 2 ) |