git - 这个 git log 输出显示了两个分支,就好像它们不是分支一样?请解释

标签 git git-log git-history-graph

feature/XY 是功能分支的名称,当前已 checkout 。 feature/XY-refactor 是另一个分支的名称,它从 feature/XY 分支出来。

当我运行 git log --oneline 时,我得到以下输出。 这两个在日志输出的最顶部一个接一个是什么意思?我在 Windows 上使用 git bash。

user@host ~/Documents/repo (feature/XY)
$ git log --oneline
9feb11a (HEAD -> feature/XY, origin/feature/XY) Axis labels
d250b90 (feature/XY-refactor) Refactored
87d49c1 Fix typoe
6a8a7c7 Fix print statement
945ffca Fix code layout
3e747c9 Added spaces after comma
b143713 Changed fontsize
a669cd4 Commented out a print statement
// .. more commits

最佳答案

git log 将返回可从特定提交或一组提交(即指定提交的历史记录)到达的所有提交。当您不指定提交时,它默认为 HEAD

因此,您有效地运行了 git log --oneline HEAD,它等同于 git log --oneline feature/XY( checkout 的分支)。

因此,您的 git log 结果告诉您,您的 feature/XY 分支有其父级(或者其父级之一,如果 9feb11a是 merge 提交)feature/XY-refactor 分支的最后一次提交。换句话说,feature/XY-refactor 分支已经以某种方式 merge 到 feature/XY 中。

git log 按时间顺序显示提交列表,但不显示它们的确切关系。要查看它,请使用 --graph 开关,它与 --oneline 配合使用效果特别好:

git log --oneline --graph

例如,如果 feature/XY-refactor 在提交 3e747c9 时分支,然后在任何单独的之前与 feature/XY merge 工作是在 feature/XY 上完成的,您会看到以下内容:

$ git log --oneline --graph

* 9feb11a (HEAD -> feature/XY, origin/feature/XY) Axis labels
|\
| * d250b90 (feature/XY-refactor) Refactored
| * 87d49c1 Fix typoe
| * 6a8a7c7 Fix print statement
| * 945ffca Fix code layout
|/
* 3e747c9 Added spaces after comma
* b143713 Changed fontsize
* a669cd4 Commented out a print statement
// .. more commits

或者,如果 feature/XY 重新基于 feature/XY-refactor,您将看到以下内容:

$ git log --oneline --graph

* 9feb11a (HEAD -> feature/XY, origin/feature/XY) Axis labels
* d250b90 (feature/XY-refactor) Refactored
* 87d49c1 Fix typoe
* 6a8a7c7 Fix print statement
* 945ffca Fix code layout
* 3e747c9 Added spaces after comma
* b143713 Changed fontsize
* a669cd4 Commented out a print statement
// .. more commits

当您使用 --graph 时,它可能会重新排序提交以制作更清晰的图表。

git log --graph 有一个缺陷:当您有两个或多个不共享公共(public)根提交的独立提交历史时,它并不明显。但根据你所说的,这不太可能是你的情况。

无论如何,您可以始终查看任何特定 ref 或“提交”的历史,方法是将其作为参数提供给 git log。试试这些命令:

git log --oneline --graph feature/XY
git log --oneline --graph feature/XY-refactor
git log --oneline --graph HEAD
git log --oneline --graph 6a8a7c7

如果您想查看两个或多个分支之间的关系:

git log --oneline --graph <branch a> <branch b> ...

如果您想查看所有分支:

git log --oneline --graph --all

作为奖励,这里有一个更详细的 git log 命令,显示日期、时间和作者:

git log --graph --pretty=format:'%C(yellow)%h%Creset %Cgreen(%cd) %C(bold blue)<%an>%Creset %C(red)%d%Creset %s' --all

关于git - 这个 git log 输出显示了两个分支,就好像它们不是分支一样?请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70252806/

相关文章:

Git 只记录文件的一部分?

Git LFS 跳过文件,但 git 开始将其推送到存储库

git - 在工作时间(或下类后)获取所有提交

git - 为什么 "git log -‌- foo"对删除的文件 foo 不起作用?

git - "git whatchanged -- filename"和 "git rev-list -- filename"有什么区别

git - Git:将两个存储库彼此 merge

Git master 分支 merge 后根本没有新文件

git - 错误 : Trying to write ref HEAD with nonexistant object

git - 在单独的终端屏幕上显示 git diff 和 git log 输出