如何 git 记录修改

how to git log amendments

所以基本上,我知道要查看过去的 git 提交,你需要做 git 日志。但是在我的公司,我们与 gerrit 合作完成一项提交,然后您对该提交进行修改。我如何查看该特定提交的所有过去修改,以便我看到他们的每个提交消息并且我可以区分这些修改?谢谢!

简答,那是不可能的。

来自Atlassian's Git Tutorials

Amended commits are actually entirely new commits and the previous commit will no longer be on your current branch.

也就是说,您将无法访问修改后的提交。

作为替代方案,您可以将所有更改作为单独的提交应用,并在完成审查时应用 squash (section: Squashing commits) them using interactive rebase

假设所有 "amendments" 具有相同的 Change-ID,
(这就是 Gerrit 如何将一组提交关联到同一个 Gerrit-Change,
您可以选择要相互比较的更改版本。

默认行为是将 Base(集合中的第一个提交)与 latest 进行比较。

在您的本地 (git-) 分支中,您还可以看到您的更改的不同版本
通过使用 git reflog 命令。

(git reflog 像面包屑一样显示您的工作历史,
你甚至可以 showcherry-pick 任何这些修订)

如果所有的修改都相同Change-Id,那么它们就是一个修改的补丁集。您没有在问题中指定如何显示差异,因此这是可能的解决方案之一。

ssh -p <port> <username>@<gerrithost> gerrit query commit:<commit-id> --patch-sets --format=json
  • port默认为29418;
  • username 是 运行 的 gerrit 用户名 gerrit query。应该赋予它阅读 refs 的权利 存储库;
  • gerrithost 是您的 gerrit 的主机名或 IP 地址;
  • commit-id 是提交的 sha1 值。
  • --format=json 是可选的。默认格式为 text.

输出包含有关更改的补丁集的详细信息,包括如下条目:

ref: refs/changes/90/812290/3
ref: refs/changes/90/812290/2
ref: refs/changes/90/812290/1

这些是 Gerrit 为推送到 refs/for 目的地的每个提交创建的引用。如果您知道数字 812290,则可以使用 change:812290 替换 gerrit query 中的 commit:<commit-id>。在本地存储库中获取这些引用:

git fetch origin refs/changes/90/812290/3

下载这些引用指向的提交,然后您可以 运行 git 命令来随意操作它们。

git diff commit1 commit2

您可以在 Gerrit 的文档中搜索 gerrit query 以了解更多信息。

使用 $ git log --reflog 就好像 reflogs 提到的所有对象都在命令行上列为 commit