【问题标题】:Why does my git log graph grow one more line after I merge a branch each time?为什么每次合并一个分支后,我的 git log graph 又增加了一行?
【发布时间】:2019-10-04 07:57:14
【问题描述】:

我习惯使用git log --oneline --graph --decorate --all 作为别名git ll 来查看终端中的提交图

但是当我每次将我的develop 合并到master 时,一个问题让我感到困惑。 上面命令的输出可能是这样的:

* 0d1bf7b (HEAD -> master) Fix typo
*   f843224 Merge 'develop' to 'master'
|\
* | d673b76 (origin/master) Remove console.log for license information
* | 5080afc Remove all http url in production
* |   f28e74b Merge branch 'develop'
|\ \
* \ \   75c5b90 Merge branch 'develop'
|\ \ \
* \ \ \   ec189e6 Merge branch 'develop'
|\ \ \ \
* \ \ \ \   eb79c75 Merge branch 'develop'
|\ \ \ \ \
* \ \ \ \ \   74631ef Merge branch 'develop'
|\ \ \ \ \ \
| | | | | | | * f7a4155 (light) Fix typo
| | | | | | | *   1d6c411 Merge 'develop' to 'light'
| | | | | | | |\
| | | | | | | |/
| | | | | | |/|
| | | | | | * | 3715f47 (develop) Finish GroupCard in Setting page
| | | | | | | * e606e68 (origin/light) Remove console.log for license information
| | | | | | | * 676774c Remove all http url in production
| | | | | | | * c1bef16 Fix api url error

您可以看到我将develop 合并到master 后生成的行太多。目前这不是什么大问题,但总有一天它会变得太多,妨碍我看到提交。

那么我做错了什么吗? 你们有没有遇到过这样的问题? 你是怎么处理的?


[2019/05/20编辑]

谢谢你们。感谢您的友好回答。

我想解决我的问题并澄清一点。 我使用了一些 GUI 工具,例如 Source tree,它显示了 git 日志,如下所示。 如您所见,在此图中,具有相同存储库的复杂行并不多。

如果我想在我的命令行界面中显示类似的图形,是否有可能?

【问题讨论】:

  • 我在这里没有看到任何意想不到的东西。您反复将develop 合并为master,但反之则不然。因此,该图显示每个合并提交在develop 中具有不同的分支父级。如果您显示完整的图表,您可能会看到所有父母都位于同一分支上。
  • 从develop到light有很多合并吗?也许您应该尝试删除“--all”参数。 从不合并回来开发定期合并到master合并到light同时显示master和light我认为时间使图表有点复杂。
  • @TimBiegeleisen 我知道这是一个非常有用的消息,显示每个合并提交,但是如果我的存储库中有三个以上的分支,我担心看到整个图片会非常复杂git 日志。
  • @Marcus 在只看到一个分支时这是一个不错的建议,我认为如果我不使用其他方法来保持整个 git 日志清晰,这是一种替代方法。
  • 如果您要启动许多并行分支,这就是您将得到的结果。

标签: git merge branch


【解决方案1】:

这就是为什么存在 squash and rebase 的原因(对于本地提交的开发,您尚未推送)。
这将有助于保持历史线性,而不是 git log 向您显示每个开发合并在其单独的轨道中。

如果我想在我的命令行界面中显示类似的图形,是否有可能?

在命令行中,您可以通过添加 --no-merges 来避免所有这些额外的行:

git log --decorate --oneline --graph --no-merges --all --branches

【讨论】:

  • 我 100% 同意 rebase 方面,这使日志更清晰,更易于阅读。但是,我不提倡系统壁球合并单个提交。我更喜欢保持提交的原子性,即使它们被合并,例如帮助运行 bisects 来查找错误的合并提交。在我看来,将父分支合并到子分支(开发中的主分支),或者在将其合并到主分支后不重新开发,会在图表中创建大量不可用的信息,但在合并之前系统地压缩会删除有价值的信息。
  • @padawin 我同意。我提到了 squash 作为帮助管理历史的工具之一(使用 rebase),但系统地应用它确实会损害有用的历史。
  • @VonC 我认为你建议的 squash 和 rebase 是我想知道的,但我发现我的 'develop' 将在我 rebase 'develop' 后留在'master' 没有单独的位置'掌握'。这是否意味着如果我想保持我的 git 日志清晰,我不能在我的 git 流中使用单独的“开发”?
  • @ChrisKao 当然,您可以在 git 流中使用单独的 develop。每次变基后,它看起来与master 一致,但会在develop 中完成的下一次提交时再次开始分支。
  • @ChrisKao 在您编辑的问题之后,我已经编辑了我的答案。
【解决方案2】:

当然,您应该在适用的情况下使用 rebase 和 squash。 此外,您可以尝试以下 --no-merges 选项,例如:

git log --oneline --graph --decorate --all --no-merges

【讨论】:

  • 这样虽然隐藏了图形的线条,但也隐藏了太多的分支信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 2014-03-16
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
相关资源
最近更新 更多