我怎么能看到我要用git推送什么?


How can I see what I am about to push with git?

如果我执行git push命令,有没有办法看看会推送什么?

我想象的是像Github的"拉取请求"功能的"文件已更改"选项卡。 当我发出拉取请求时,我可以查看如果他们接受我的拉取请求将会被拉入的内容:github example of aggregate changes

命令行没问题,但我更喜欢某种GUI(如上面的截图)。


要获取要推送的文件列表,请运行:

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

例:

1
git diff --stat --cached origin/master

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

1
git diff [remote repo/branch]

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

1
git diff --numstat [remote repo/branch]

如果你想在GUI中看到这些差异,你需要为它配置git。请参阅如何使用可视差异程序查看'git diff'输出?


总是干涸的:

1
git push --dry-run

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

如果你想要一个更加图形化的视图,你有很多选择。

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

alt text

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

通过键入gitk&在要跳转的分支中打开shell中的gitk,然后查看远程控件上的内容与要推送到远程控制器的内容之间的区别,选择本地未按下的提交并右键单击遥控器并选择"Diff this - > selected":
alt text


只需列出等待推送的提交:
(这是你会记住的那个)

1
git cherry -v

Show the commit subjects next to the SHA1s.


您可能想要运行git difftool origin/master...。这应该显示当前分支上尚未在原始/主分支上的统一差异,并将其显示在您选择的图形差异工具中。要获得最新信息,请先运行git fetch


在推送远程仓库之前比较本地版本的一种方法(在干运行中推送):

使用TortoiseGit:
右键单击根文件夹项目> TortoiseGit> Diff with previous version>
对于版本2,请选择refs/remotes/origin/master


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


使用git gui,您可以在其中看到实际提交中已更改内容的列表。您还可以使用gitk为reflog提供简单的界面。只需在remotes/...master之间进行比较,看看会推送什么。它提供类似于屏幕截图的界面。

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


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

1
git diff --stat --patch origin master

注意:如果您碰巧使用任何Intellij IDE,则可以右键单击顶级项目,选择Git> Compare with branch>并选择您想要的原点,例如: origin/master。在出现的文件树中,您可以双击文件以查看可视差异。与上面的命令行选项不同,您可以从diff窗口编辑本地版本。


如果您使用的是Mac OS X,我会建议您使用Tower,这是一个很棒的程序,让我对Git的处理很愉快。我现在更需要记住终端命令,它提供了一个很棒的GUI来查看,跟踪和解决文件中的差异。

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

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


  • 如果您对远程具有写入权限
  • git push --dry-run

  • 如果您没有远程写入权限
  • git diff --stat HEAD remote/branch


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

    1
    git cherry -v

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

    1
    git diff HEAD^^


    只是为了加上我的两分钱......
    我想在gitlab运行时在gitlab管道中运行作业时实现这一点。
    执行此操作的最佳方法是使用此脚本:

    1
    git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

    另外在我的情况下我想通过扩展来过滤文件,为了达到这个目的,我使用了:

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

    之后,您可以将此列表转发到其他地方,也许是一个linter;)

    希望这会对某人有所帮助。