好吧,那么:
在svn和bzr中,我可以分支、提交、合并,提交历史将如下所示:

41: Theodore R. Smith 2013-09-14 Jump to list by name instead of number.
40: Theodore R. Smith 2013-09-14 [merge] [m] Miscellaneous cleanups.
  39.1.4: Theodore R. Smith 2013-09-14 [m] Removed old files.
  39.1.3: Theodore R. Smith 2013-09-14 [m] Fixed bug where test could not...
  39.1.2: Theodore R. Smith 2013-09-14 [m] Fixed a CSS layout bug from th...
  39.1.1: Theodore R. Smith 2013-09-14 [m] Fixed a typo.
39: Theodore R. Smith 2013-09-14 Added a progress bar.
38: Theodore R. Smith 2013-09-14 [merge] Updated the core libraries.
  37.1.3: Theodore R. Smith 2013-09-14 Updated HTML Kickstarter.
  37.1.2: Theodore R. Smith 2013-09-14 Upgraded to from jQuery 1.8.3 to 2.0.3.
  37.1.1: Theodore R. Smith 2013-09-14 Upgraded to jQuery Address v1.6.

如果我不想扩展历史,我可以:
41: Theodore R. Smith 2013-09-14 Jump to list by name instead of number.
40: Theodore R. Smith 2013-09-14 [merge] [m] Miscellaneous cleanups.
39: Theodore R. Smith 2013-09-14 Added a progress bar.
38: Theodore R. Smith 2013-09-14 [merge] Updated the core libraries.

在任何时候,我都可以通过bzr diff -r37.1.2..37.1.3等方式,轻松地获取各个合并提交的差异等信息。
重要的是,我的分支历史被保留,主线提交历史不被次要功能提交所污染。
现在,每当我在git中进行功能合并时,不管有没有--no-ff,我都会在提交历史记录中得到以下信息:
<hash>: Theodore R. Smith 2013-09-14 Jump to list by name instead of number.
<hash>: Theodore R. Smith 2013-09-14 [merge] [m] Miscellaneous cleanups.
<hash>: Theodore R. Smith 2013-09-14 [m] Removed old files.
<hash>: Theodore R. Smith 2013-09-14 Added a progress bar.
<hash>: Theodore R. Smith 2013-09-14 [m] Fixed bug where test could not...
<hash>: Theodore R. Smith 2013-09-14 [merge] Updated the core libraries.
<hash>: Theodore R. Smith 2013-09-14 [m] Fixed a CSS layout bug from th...
<hash>: Theodore R. Smith 2013-09-14 Updated HTML Kickstarter.
<hash>: Theodore R. Smith 2013-09-14 [m] Fixed a typo.
<hash>: Theodore R. Smith 2013-09-14 Upgraded to from jQuery 1.8.3 to 2.0.3.
<hash>: Theodore R. Smith 2013-09-14 Upgraded to jQuery Address v1.6.

我的问题有很多。
功能次要提交都在主线历史中。我勒个去?
功能次要提交在主线历史记录中混乱。似乎它们是基于它们原来的提交时间而不是合并时间被困在那里的;o
修订ID没有直接的数字排序,只有随机散列。但我打赌那是不可能的。
基于这一点,我不知道特性分支的结束或开始位置。
我想要一个解决方案
保留所有提交历史记录,并允许我区分次要功能提交。这是代码取证所需要的。所以git rebase是不可能的,正如git merge --squash一样。
不会污染主线提交日志。这可能是最严重的。
根据合并时间,将所有提交按正确顺序保存。求你了,我不能让小的承诺被混合匹配。
最理想的方式是让我至少可以按照正确的顺序查看所有次要功能提交,以及主线历史记录,比如bzr的工作方式,但我不介意只使用钻取命令查看这些信息,比如git log
感谢您帮助我理解这个过于复杂的程序!

最佳答案

git和bazaar的图形是完全相同的,我知道,因为我编写了git的官方bazaar桥,唯一的区别是如何通过log命令显示图形。
git log有很多选项,因此可以指定要以何种方式显示该图。
看起来你想要的是:

git log --oneline --graph

它将以类似于bzr log的方式向您显示合并:
*   eaaec50 Merge git://github.com/git-l10n/git-po
|\
| * 1b5f46f l10n: Add reference for french translation team
| * 6b388fc l10n: fr.po: 821/2112 messages translated
* |   2809258 Merge branch 'sb/mailmap-updates'
|\ \
| * | cdb6b5a .mailmap: Combine more (name, email) to individual persons
| * | 10813e0 .mailmap: update long-lost friends with multiple defunct addresses
* | | 8ed205a git-remote-mediawiki: ignore generated git-mw
| |/
|/|
* |   96cb27a Merge branch 'maint'

您也可以完全忽略“次要提交”
git log --oneline --first-parent

eaaec50 Merge git://github.com/git-l10n/git-po
2809258 Merge branch 'sb/mailmap-updates'
8ed205a git-remote-mediawiki: ignore generated git-mw
96cb27a Merge branch 'maint'

如果您厌倦了键入所有这些选项,可以配置别名:
git config --global alias.l 'log --oneline --graph'

所以你只需输入git l

08-27 08:17