28

我在我的项目中使用 Git 并尝试遵循最佳实践:

  1. 我在一个主题分支上工作
  2. 准备好后,我将主题分支合并到我的开发分支中,使用git merge --squash. 这使我的开发分支保持清洁。
  3. 每当dev分支稳定并且团队决定是时候发布时,我们将dev分支合并到master分支,而不使用 squash,并将该提交标记为版本发布。

这应该保留我们的历史记录,并且使用 gitk,我们可以看到所有提交的来源。但是,我希望能够看到应用于分支的提交。我试过了:

git log master
git show-branch

这些都没有显示分支历史。有没有办法轻松做到这一点?

4

3 回答 3

24

如果我对您的理解正确,您希望看到合并回到 master,而不是这些合并的历史。我相信:

git log --merges

会给你你想要的。

更新:添加 --first-parent 应该可以从它的声音中解决这个问题。

git log --merges --first-parent

--第一父母

Follow only the first parent commit upon seeing a merge commit.

在查看特定主题分支的演变时,此选项可以提供更好的概览,因为合并到主题分支往往只是不时调整到更新的上游,并且此选项允许您忽略引入的单个提交通过这样的合并你的历史。

于 2011-01-07T19:26:36.640 回答
10

不幸的是,Git 不存储提交的分支信息,并且提交不属于分支。Git 中的分支只是提交过程中的“移动标签”,而不是预期的提交序列。

所以基本上你不能显示属于分支的提交,因为 Git 中没有这样的概念。

于 2014-01-07T08:30:22.610 回答
3

由于 Git 不存储有关哪个分支从哪个其他分支新生的信息,因此无法自动猜测您可能希望显示哪个分支。

在这方面,--first-parent最终不会有帮助,尤其是因为很容易拥有多个大师,例如。考虑:

wc1$ git clone git://shared.com/repo
wc1$ (hack code, git commit)
wc2$ git clone git://shared.com/repo
wc2$ (hack code, git commit, git push somewhere)
wc1$ git fetch origin; git merge origin/master; git push somewhere master;

(随意做一个随机项目并做这个练习。)画图。所以你不能有意义地绘制“只有一个分支”,即使提交是用它们所在的分支的名称标记的(因为两者都是主分支)。

于 2011-01-07T22:06:20.143 回答