查看未发表的Git向Gerrit提交

时间:2012-12-15 02:12:13

标签: git gerrit

我想要完成的内容与此问题/答案中的内容类似:Viewing Unpushed Git Commits。我想知道我的本地计算机中是否有任何东西在gerrit服务器中没有“备份”。

当尝试使用该问题中的建议时,使用Gerrit时,结果还会列出属于尚未接受回购的已发布提交类别的提交。它们在gitk中以published/BRANCH_NAME标记显示。我只想显示未被推送到远程gerrit存储库的提交,即使它们未被接受。

例如,如果我在提交的提交中使用git log --graph --branches --not --remotes --decorate

commit 51blahblah123...456blah42e3 (refs/published/blah_fix, blah_fix)
Author: xyz <...>
Date:   Wed Jul 22 12:28:39 2012 -0500

  Commit description

  Change-Id: I83ae...blah...184

这些是我想要跳过的提交。在gitk中,上次发布的提交显示紫色背景而不是分支名称上的绿色背景。是否有相当于--remotes的那些?

我也尝试使用git log origin/master..HEAD,但我收到以下错误:

 fatal: ambiguous argument 'origin/master..HEAD': unknown revision or path not in the working tree.

所以我试着使用一个特定的版本(我想我正在使用一个工作分支而不是远程的主分支)并且它有效,但是因为我必须去寻找所有的分支,所以这个用途就失败了。< / p>

我也考虑了git log @{u}.. --graph --decorate,但这似乎跳过了我未能通过远程跟踪创建(错误)的分支。

2 个答案:

答案 0 :(得分:1)

此命令将列出可从本地分支机构访问但在远程设备上不存在的所有提交(假设您的远程设备称为origin):

git ls-remote origin | cut -f 1 | xargs git log --graph --decorate --branches --not

答案 1 :(得分:0)

为了查看是否已将提交推送到远程存储库(Gerrit的更改集记录在存储库中,因此它们将出现在Chronial提到的git ls-remote输出中),您可以从本地提交grep输出

假设您的Gerrit存储库为origin远程:

使用git ls-remote --quiet,您可以获得所有远程引用的列表,使用git log --pretty="%H" origin/master..master,您可以获得尚未合并到存储库的提交哈希值。

因此,遵循Fish shell代码会为您提供存储库中存在的更改:

for i in (git log --pretty="%H" origin/master..master)
    git ls-remote --quiet | grep $i
end

如果git ls-remote返回一行,则提示已被推送,否则将不会。然后根据需要调整此流程到您的环境:)

为了提高性能,您可能希望将git ls-remote的输出保存到变量并从那里检查,而不是总是再次获取远程数据。

如果您可以使用Gerrit’s SSH API,则可以使用

ssh -p 29418 -l GERRIT_USER GERRIT_SERVER gerrit query --format=json 7b5a1d510

代替git ls-remote获取详细信息的JSON响应,其中rowCount表示匹配数量。