git log 显示的内容与 git rebase -i head~3 显示的不一致。

7

我在使用rebase时遇到了问题。我想要压缩一些构建,但是我做不到。

当我执行命令git log –oneline时,我得到了以下结果:

git log --oneline
2e6d3cf Fix bug fetching data
4abe96e conflicts merged
34d130d latam_schedule with geotargeted languaje and data fetching
8687f73 removes extra lines, and add the includes I remove before.
eed4f10 unnecessary adds and sample block removed
d2d58e6 latam_schedule with geotargeted languaje and data fetching
75b1b6d parseo el string para extraer las horas.
8a3b067 Agrego un render con datos reales
d856ef1 Agrego un render de data dummy
7331f83 Alert removed(commented)
128bfc1 First LATAM commit
4dd79cb Merge pull request #1016 from matterhorn/disco-608-bugfix

问题在于,当我执行git rebase HEAD~3时,我看不到我想要合并的2e6d3cf、4abe96e和34d130d提交。相反,在我执行git rebase -i HEAD~3时,我看到了以下内容:
pick 34d130d latam_schedule with geotargeted languaje and data fetching
pick d2d58e6 latam_schedule with geotargeted languaje and data fetching
pick eed4f10 unnecessary adds and sample block removed
pick 8687f73 removes extra lines, and add the includes I remove before.
pick 2e6d3cf Fix bug fetching data

问题在于我不知道为什么列表中包含d2d58e6、eed4f10和8687f73。另一方面,如果我尝试继续压缩,会出现很多不应该存在的冲突(例如尝试合并过时文件)。

这是git log --oneline --graph --decorate显示的内容。

git log --oneline --graph --decorate
* 2e6d3cf (HEAD, matterhorn-latam/latam, latam) Fix bug fetching data
*   4abe96e conflicts merged
|\
| * 8687f73 (matterhorn-latam/master, master) removes extra lines, and add the includes I remove before.
| * eed4f10 unnecessary adds and sample block removed
| * d2d58e6 latam_schedule with geotargeted languaje and data fetching
* | 34d130d latam_schedule with geotargeted languaje and data fetching
|/
* 75b1b6d parseo el string para extraer las horas.
* 8a3b067 Agrego un render con datos reales
* d856ef1 Agrego un render de data dummy
* 7331f83 Alert removed(commented)
* 128bfc1 First LATAM commit

有什么想法吗?

1
请展示 git log --oneline --graph --decorate 的输出。同时,请记住,除非您使用 -p--preserve-merges,否则 rebase 不会保留合并提交。此外,您的问题有点令人困惑,因为您说缺少的一些提交实际上是存在的,只是顺序相反,因为 rebase 按照它们在 git log 中显示的相反顺序应用提交。 - user456814
我刚刚将那些信息添加到了帖子中。 - Werem
1
没错。你得到了意外的结果,因为你没有使用 --preserve-merges。但是,你所说的 "2e6d3cf4abe96e34d130d 这三个提交,我想在执行 git rebase HEAD~3 时合并" 是什么意思?你所说的 "合并" 是什么意思?你是不是想要 压缩 这些提交?在 git 中,“合并”有一个非常具体的含义:将两个分支合并在一起。这不是你想对这些提交做的事情,对吗?请澄清你的问题。 - user456814
我刚刚编辑了这篇文章。你是对的,我想要“压缩”我的树的最后几个提交。有几件事情让我感到困惑,比如:为什么如果我使用“HEAD〜3”,我没有得到最后的三个提交呢?谢谢。 - Werem
注意:如果您的git log在交互式重新基础上的重命名期间,请小心:请参阅“git rebase -i shows wrong commit history after a rebase and force push”。使用Git 2.24+(2019年第4季度)。 - VonC
1个回答

3
需要进行的提交未被观察到,因为HEAD~3告诉git始终遵循提交树中的第一个父节点,这恰好是跟随合并的分支历史记录,从你的问题来看,这不是你想要的历史记录。
你需要明确选择commit^1commit^2(对于八爪鱼合并还有commit^3)来导航树。对于你的示例:
git log --oneline --graph --decorate
* 2e6d3cf HEAD
*   4abe96e HEAD^1 = HEAD~1 (! History branches here. !)
|\
| * 8687f73 HEAD^1^1 = HEAD^^ = HEAD~2
| * eed4f10 HEAD^^^ = HEAD~3
| * d2d58e6 HEAD^^^^ = HEAD~4
* | 34d130d HEAD^2   (! Note !)
|/
* 75b1b6d HEAD^2^ = HEAD^^^^^ = HEAD~5
* 8a3b067 ...
* d856ef1 ...
* 7331f83 ...

这里的顺序有点不同寻常,因为合并提交记录了父提交,使得合并时的 HEAD 总是第一个父提交,这意味着在合并时您必须在 8687f73 上,才能算作第一个父提交。


2
你能添加启动rebase的git命令吗? - Olsgaard
@mockinterface 我知道这有点老了,但你能分享一下命令应该怎么写吗? - David Rearte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接