我如何查看要使用git推送的内容?


587

有没有办法查看我git push执行命令后将被推送的内容?

我所描绘的是类似Github的“拉动请求”功能的“文件已更改”标签。当我发出拉取请求时,我可以查看并查看如果他们接受我的拉取请求将被拉入什么内容:汇总更改的github示例

命令行是可以的,但是我更喜欢某种GUI(例如上面的屏幕截图)。



许多相关的问题/答案;这是另一个:stackoverflow.com/questions/2176278/preview-a-git-push/…–
迈克尔

Answers:


664

有关要推送的文件的列表,请运行:

git diff --stat --cached [remote/branch]

例:

git diff --stat --cached origin/master

对于要推送的文件的代码差异,请运行:

git diff [remote repo/branch]

要查看将要更改的文件的完整文件路径,请运行:

git diff --numstat [remote repo/branch]

如果要在GUI中查看这些差异,则需要为此配置git。请参阅如何使用可视化差异程序查看“ git diff”输出?


8
git diff --cached的两种变体都没有给出commit,只会显示与HEAD的差异。我认为您的意思是git diff [--stat] --cached origin / master,假设起点的主分支是master
mfontani 2010年

52
这不是您想要的。您应该HEAD针对原点(git diff origin/master HEAD)而不是索引diff 。当且仅当您没有暂存要提交的更改时,对索引进行比较才会产生相同的结果。如果您上演了更改,它们将包含在差异中,但由于尚未提交,因此显然不会被推送。
卡斯卡贝尔

5
需要编辑此答案,以在@Jefromi的注释中包含信息,这才 git diff --stat origin/master HEAD是正确的答案。
Tony Topper

2
@mfontani对我来说是正确的答案。我要检查的是我已经提交的内容将推动什么,而不是如果我提交已更改的所有内容将推动什么。git diff --cached [remote/branch]绝招:)
poshaughnessy13年

2
您可以使用@ {u}而不是输入origin / master,例如git diff @ {u}或git diff HEAD @ {u}。请注意,仅当您已经创建并链接了上游跟踪分支时,此方法才有效。当我有很多分支机构和许多遥控器时,我发现它很有用,这样我就不必考虑在何处链接了什么。
Damien Sawyer 2014年

192

总是空运行:

git push --dry-run

除了实际发送数据外,它将执行所有操作。

如果您想要更多的图形化视图,则可以有很多选择。

git附带的Tig和gitk脚本都显示本地副本的当前分支以及远程或原始副本的分支。

替代文字

因此,您在原点之后进行的所有提交都是将被推送的提交。

在要键入的分支中,从Shell打开gitk gitk&,然后键入要查看的内容,然后查看远程对象和即将推送到远程对象之间的区别,选择本地未推送的提交,然后右键单击远程对象,然后选择“差异->选定”: 替代文字


18
git push --dry-run不会像我希望看到的那样显示任何内容。gitk更近了,但是它没有显示将要推送的所有更改的总和。因此,如果我要向远程推送6次提交,我想查看将被推送的总和。我不在乎每个提交都有什么,因为一个提交可能被下一个完全否定。
cmcculloh 2010年

1
如果您需要区分将要推送的内容,请执行git diff --stat HEAD origin/mastergit diff HEAD origin/master。重要的是HEAD,否则您的差异中应包含未提交的更改
Daniel Alder 2014年

出于某种原因,git在尝试将数据推送到远程之前不会自动进行空运行吗?如果您要推送大量数据,它将上传所有数据,然后显示任何错误。您刚刚浪费了时间和带宽,现在必须重新上传数据。这似乎是奇怪的行为。
zeusstl 2015年

1
问题git push --dry-run在于它仍然需要在远程进行写许可。因此,如果您有一个未经许可就可以向上游推送的克隆,但是您想查看本地未进行的更改是什么,--dry-run则不要这样做。
Ed Avis

这是一个很好的解决方案,但应注意,它确实需要连接到远程服务器(包括输入SSH密钥(如果适用))。如果你只是想看看之间的区别branchorigin/branch,我会约努茨G. Stan的回答去,因为它实际上并不需要连接到远程回购。这可能是好是坏,取决于您的需求。
肖恩·比恩

169

如果只列出等待推提交:这是你会记得一个

git cherry -v

在SHA1旁边显示提交主题。


5
一件有趣的事情是,您可以指定一个远程进行比较,例如:git cherry -v heroku/remote如果您将代码保留在多个远程中。
fagiani

什么才是使我们能够真正关联这些提交所包含的差异的最佳补充命令?
哈桑·拜格

这个命令很好,但是我想要更多细节,例如在推送过程中要更改的文件名。
LS

21

您可能想跑步git difftool origin/master...。它应显示当前分支上尚未位于origin / master分支上的当前内容的统一差异,并将其显示在您选择的图形差异工具中。要保持最新状态,git fetch请先运行。


2
git difftool -d origin/master,我将difftool设置为融合,因此效果很好,谢谢!
Aquarius

git difftool -d更好,谢谢水瓶座力量。唯一的问题是,它不会检测到移动的文件,而是显示为已删除和已添加。
EM0

8

在将本地版本推送到远程仓库之前比较本地版本的一种方法(以空运行方式推送):

使用TortoiseGit:
右键单击根文件夹项目> TortoiseGit>与先前版本不同>
对于版本2,选择refs/remotes/origin/master


8

尝试git diff origin/master..master(假设这origin/master是您的上游)。与不同git push --dry-run,即使您没有对上游的写入权限,这仍然有效。


5

使用git gui,您可以在其中查看实际提交中更改的列表。您还可以使用gitkwich为reflog提供简单的界面。只是比较之间remotes/...,并master看到了,什么都会推动。它提供了类似于您的屏幕截图的界面。

这两个程序都包含在git中。


1
我在git gui中看不到任何地方来显示已提交但尚未推送的所有内容。
cmcculloh 2010年

在git gui中,您可以看到已修改但未提交的内容。在极化液(通过gitk --all你得到的所有评论的完整列表,现在你可以用你的遥控器比较您的开发分支的实际状态来推。
FUZ

4

要查看更改了哪些文件查看实际的代码更改(与master分支相比),可以使用:

git diff --stat --patch origin master

注意:如果碰巧使用了任何Intellij IDE,则可以右键单击顶层项目,选择Git > 与分支比较 >,然后选择所需的原点,例如origin/master。在将出现的文件树中,您可以双击文件以查看视觉差异。与上面的命令行选项不同,您可以从diff窗口中编辑本地版本。


3

您可以通过以下方式列出提交:

git cherry -v

然后与以下命令进行比较,其中^的数量等于提交的数量(在示例中,它的2个提交):

git diff HEAD^^

查看最新提交的列表是一个很好的选择。这不会给出文件的名称。因此,正如有人回答使用空运行选项和补丁选项更好。git diff --stat --patch原始大师git push --dry-run
Sree Rama

2

如果您使用的是Mac OS X,我建议您使用Tower,它是一个很棒的程序,它使我很高兴与Git打交道。我现在不再需要记住终端命令,它提供了一个出色的GUI,可以查看,跟踪和解决文件中的差异。

不,我不隶属于他们,我只是使用他们的软件并且非常喜欢它。

http://www.git-tower.com/


2
我使用Tower,但是如何查看已提交但尚未推送的文件?
Michael Irey

这不能回答问题。
reinierpost

1

只是加我的两分钱...我想在gitlab运行器上的gitlab管道中运行作业时实现此功能。最好的方法是使用以下脚本:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

同样在我的情况下,我想按扩展名过滤文件,以实现此目的,我使用了:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA '*.py'

之后,您可以例如将此列表转发到其他地方,或者是短绒毛;)

希望这会帮助某人。


1
  1. 如果您具有远程写权限
git push --dry-run
  1. 如果您没有远程写权限
git diff --stat HEAD remote/branch

0

之后git commit -m "{your commit message}",您将在推送之前获得提交哈希。因此,您可以git通过运行以下命令来查看要推送的内容:

git diff origin/{your_branch_name} commit hash

例如: git diff origin/master c0e06d2


感谢您的回答,但我认为这不是必需的工作,因为这个问题已经很老了并且票数很高。您最好将精力花在不同的问题上。
Pbd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.