为什么 git log 中显示的提交数量与 git rebase -i HEAD~n 中的提交数量不匹配?

问题描述 投票:0回答:1

我想执行交互式变基以压缩一些提交。

我这样做的方法是:

  • 使用
    git log
    搜索我想要压缩的提交
  • 计算来自
    HEAD
  • 的提交数量
  • 使用
    git rebase -i HEAD~n
    ,其中
    n
    是来自
    HEAD
  • 的提交数量

这是错误的方法吗?我已经使用这种技术有一段时间了,有时想知道为什么提交数量不匹配。

为了演示,这里是

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
的输出。

130f00e me              Fri Apr 19 16:37:15 2024 +0000  commit message
c7bb70c me on github    Fri Apr 19 17:08:28 2024 +0100  Merge pull request #419 from company/MY-DEV-BRANCH
3e3f411 me              Fri Apr 19 16:07:42 2024 +0000  commit message
47e769e colleague       Fri Apr 19 17:00:26 2024 +0100  Merge pull request #418 from company/colleague -patch-28
998be63 colleague       Fri Apr 19 16:59:53 2024 +0100  commit message
7b75da8 colleague       Fri Apr 19 16:59:31 2024 +0100  commit message
c7f0da1 colleague       Fri Apr 19 15:54:59 2024 +0100  Merge pull request #417 from company/mycolleague/HIS-DEV_BRANCH
43e927d colleague       Fri Apr 19 15:54:49 2024 +0100  Merge branch 'master' into mycolleague/HIS-DEV_BRANCH
06d62f2 colleague       Fri Apr 19 14:52:50 2024 +0000  commit message
3de4d90 me on github    Fri Apr 19 15:08:37 2024 +0100  Merge pull request #414 from company/MY-DEV-BRANCH
374add4 me              Fri Apr 19 14:00:36 2024 +0000  commit message
ba4fd3b me              Fri Apr 19 14:00:07 2024 +0000  Merge remote-tracking branch 'origin/master' into MY-DEV-BRANCH
aed07ae me              Fri Apr 19 13:37:31 2024 +0000  commit message
44e119d colleague       Fri Apr 19 10:09:46 2024 +0100  Merge pull request #416 from company/colleague -patch-46
da11abe colleague       Fri Apr 19 10:09:39 2024 +0100  commit message
a74b81a colleague       Fri Apr 19 10:09:18 2024 +0100  commit message
80b4003 colleague       Fri Apr 19 09:51:56 2024 +0100  Merge pull request #415 from company/mycolleague/HIS-DEV_BRANCH
0489446 colleague       Fri Apr 19 08:50:09 2024 +0000  commit message

此输出中有 18 行。因此

n=18

这是

git rebase -i HEAD~18
的输出。

pick 45c0d75 (me <[email protected]>) commit message
pick a519421 (me <[email protected]>) commit message
pick 5bb52cc (me <[email protected]>) commit message
pick 51f831a (me <[email protected]>) commit message
pick 530a6f3 (me <[email protected]>) commit message
pick 72c89c8 (me <[email protected]>) commit message
pick 59052f4 (me <[email protected]>) commit message
pick ce9faf9 (colleague <[email protected]>) commit message
pick e399c0a (colleague <[email protected]>) commit message
pick 82f29f0 (colleague <[email protected]>) commit message
pick 9c405ed (colleague <[email protected]>) commit message
pick a1f4893 (colleague <[email protected]>) commit message
pick b974516 (colleague <[email protected]>) commit message
pick 50d2394 (colleague <[email protected]>) commit message
pick 020e80c (colleague <[email protected]>) commit message
pick 09addd8 (colleague <[email protected]>) commit message
pick ef65821 (colleague <[email protected]>) commit message
pick ca4f3f7 (colleague <[email protected]>) commit message
pick e1098a7 (colleague <[email protected]>) commit message
pick 2275c59 (colleague <[email protected]>) commit message
pick c3614f2 (other-colleague <[email protected]>) commit message
pick 0e7fa78 (other-colleague <[email protected]>) commit message
pick b7ee582 (me <[email protected]>) commit message
pick 117178a (colleague <[email protected]>) commit message
pick 4f68792 (me <[email protected]>) commit message
pick 821a479 (me <[email protected]>) commit message
pick 6ea09f1 (me <[email protected]>) commit message
pick 0936af5 (me <[email protected]>) commit message
pick 6b43a34 (me <[email protected]>) commit message
pick 23a1f3e (me <[email protected]>) commit message
pick 9e907af (colleague <[email protected]>) commit message
pick 64c08cc (colleague <[email protected]>) commit message
pick 58e0601 (colleague <[email protected]>) commit message
pick 002c5e6 (colleague <[email protected]>) commit message
pick 17f71cb (colleague <[email protected]>) commit message
pick de2b3a6 (colleague <[email protected]>) commit message
pick 9a2bfb0 (colleague <[email protected]>) commit message
pick 94728d9 (colleague <[email protected]>) commit message # empty
pick 48f1190 (colleague <[email protected]>) commit message
pick 0489446 (colleague <[email protected]>) commit message
pick 06d62f2 (colleague <[email protected]>) commit message
pick 392e9c3 (me <[email protected]>) commit message
pick aed07ae (me <[email protected]>) commit message
pick a74b81a (colleague <[email protected]>) commit message
pick da11abe (colleague <[email protected]>) commit message
pick 374add4 (me <[email protected]>) commit message
pick 7b75da8 (colleague <[email protected]>) commit message
pick 998be63 (colleague <[email protected]>) commit message
pick 3e3f411 (me <[email protected]>) commit message
pick 130f00e (me <[email protected]>) commit message

# Rebase d0bea91..130f00e onto d0bea91 (50 commands)

这显然比 18 行多得多。其实一共有50行。

为什么会出现这种情况?这里发生了什么?显然,这种变基方法没有多大意义。那我应该做什么呢?

git
1个回答
0
投票

一路上你有一个

merge commit
,所以你也可以看到这些提交。

尝试使用不同的标志来查看差异

--preserve-merges

完整解释:git 的“rebase --preserve-merges”到底是做什么的(为什么?)

--rebase-merges

© www.soinside.com 2019 - 2024. All rights reserved.