如果我执行git push命令,有没有办法看看会推送什么?
我想象的是像Github的"拉取请求"功能的"文件已更改"选项卡。 当我发出拉取请求时,我可以查看如果他们接受我的拉取请求将会被拉入的内容:
命令行没问题,但我更喜欢某种GUI(如上面的截图)。
-
相关:stackoverflow.com/questions/3080509/
-
许多相关的问题/答案; 这是另一个:stackoverflow.com/questions/2176278/preview-a-git-push/
要获取要推送的文件列表,请运行:
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'输出?
-
git diff的两种变体 - 没有给出提交的缓存只会显示与HEAD相关的差异。我认为你的意思是git diff [--stat] - 缓存的origin / master,假设origin的主分支是master
-
@mfontani,是的,你是对的。现在我意识到我实际回答的是一种方式来看待将要发生的事情,而不是推动。所以,是的,应该给出一条路径。
-
这不完全是你想要的。您应该对原点(git diff origin/master HEAD)diff HEAD而不是索引。当且仅当您没有为提交暂存更改时,区分索引将给出相同的结果。如果您进行了更改,它们将被包含在差异中,但显然不会被推送,因为它们尚未提交。
-
需要编辑此答案以包含来自@Jefromi git diff --stat origin/master HEAD的评论中的信息是正确的答案。
-
@mfontani对我有正确的答案。我想检查从我已经提交的内容中推送出什么内容,而不是如果我承诺我已经改变的内容将会得到什么。 git diff --cached [remote/branch]诀窍:)
-
git diff显示"diff",而不是将被推送的内容。
-
@thekashyap我认为你错过了git diff中的--stat选项。
-
@stan,git diff --stat origin/master显示差异。如果您执行git push,则无法保证早期git diff生成的文件列表将被push编辑。答案完全忽略了提交的概念。
-
@thekashyap啊,你的意思是Jefromi已经说过了对HEAD的一些评论。是的,这是真的。
-
我测试了这里提到的diff的所有变体,没有产生任何输出。但push --dry-run显示06b7b81..ffa79a8 master -> master
-
如何接受这个答案?它甚至没有做它的描述所说的,也没有按照要求做。没有范围的git diff总是会将当前工作目录与某些东西区分开来,缓存它至少与下次提交的内容不同,但绝不会推送什么。 Brian的push --dry-run是迄今为止唯一可用的答案,另一个是git diff --stat HEAD origin/master
-
git diff --cached HEAD(所有文件都按文件更改)和git diff --stat HEAD(更简陋 - 当你用绿色加号和红色缺点和底部的简短摘要进行git pull时它看起来像)我最好查看将要提交的内容。 (另外,git diff --cached我相信最后暗示HEAD - 至少它对我有用。你也可以做git diff --cached file。git diff --stat但是,似乎不起作用。)
-
而不是输入origin / master,你可以使用@ {u}例如git diff @ {u}或git diff HEAD @ {u}注意,只有在你已经创建并链接了一个上游跟踪分支时,这才有效。当我有很多分支和大量的遥控器时,我觉得它很有用,所以我不必考虑在哪里链接。
-
非常宝贵,非常感谢!
-
当它应该是"git viewfiles"或者你能记住的东西时,感觉就像白痴一样要记住那个命令
-
您可以使用git status来确定[remote/branch]的值
-
此方法不连接到远程仓库(只是与origin/branch进行比较),因此它可能无法反映所有已推送到远程的提交。始终先运行git pull origin以确保origin/branch是最新的。 (为了便于解释,如果相同的提交被推到另一个分支的远程但没有被拉到你的工作仓库,它仍会显示它们,但它们不需要被推动。或者更糟的是,如果存在冲突远程仓库中的更改,这不会给你任何关于它们的警告。)
总是干涸的:
除了实际发送数据外,它将执行所有操作。
如果你想要一个更加图形化的视图,你有很多选择。
Tig和git附带的gitk脚本都显示本地副本的当前分支以及远程或原点的分支。
因此,您在原点之后进行的任何提交都是将被推送的提交。
通过键入gitk&在要跳转的分支中打开shell中的gitk,然后查看远程控件上的内容与要推送到远程控制器的内容之间的区别,选择本地未按下的提交并右键单击遥控器并选择"Diff this - > selected":
-
git push --dry-run并没有向我展示我希望看到的东西。 gitk更接近,但它没有向我显示将推送的所有更改的总计。因此,如果我将6个提交推送到远程,我想看到将要推送的总数。我不关心每个提交单独的内容,因为下一个提交可以被完全否定。
-
如果您需要推送的差异,请执行git diff --stat HEAD origin/master或git diff HEAD origin/master。重要的是HEAD,否则您在diff中包含未经修改的更改
-
有没有理由认为git在尝试将数据推送到远程数据库之前不会自动执行干运行?如果您要推送大量数据,它会上传所有数据,然后显示任何错误。您刚刚浪费时间和带宽上传您现在必须重新上传的数据。这似乎是一种奇怪的行为。
-
git push --dry-run的问题是它仍然需要远程的写权限。因此,如果你有一个没有权限推送上游的克隆,但是你想看看你的本地未经推送的更改是什么,--dry-run将不会这样做。
-
这是一个很好的解决方案,但应该注意它确实需要连接到远程(如果适用,包括输入SSH密钥)。如果你只是想看看branch和origin/branch之间的区别,我会选择Ionu吗? G. Stan的答案,因为它实际上并不需要连接到远程仓库。根据您的需要,这可能是好的也可能是坏的。
只需列出等待推送的提交:
(这是你会记住的那个)
Show the commit subjects next to the SHA1s.
-
一个有趣的事情是你可以指定一个遥控器来比较,如:git cherry -v heroku/remote,以防你的代码保存在多个遥控器中。
-
什么是最好的补充命令,它允许我们实际关联这些提交包含的差异?
-
这个命令很好,但是我想要更多的细节,比如在推送期间要更改的文件的名称。
您可能想要运行git difftool origin/master...。这应该显示当前分支上尚未在原始/主分支上的统一差异,并将其显示在您选择的图形差异工具中。要获得最新信息,请先运行git fetch。
-
优秀!谢谢!
-
git difftool -d origin/master,我把我的difftool设置为融合所以它很棒,谢谢!
-
git difftool -d更好,感谢Aquarius Power。唯一的问题是它没有检测到移动的文件,而是将它们显示为已删除并添加。
在推送远程仓库之前比较本地版本的一种方法(在干运行中推送):
使用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中。
-
我没有在git gui中看到任何显示已经提交但未被推送的内容的地方。
-
在git gui你可以看到,修改了什么但没有提交。在gik中(Via gitk --all,您将获得所有注释的完整列表。现在您可以将dev-branch的实际状态与您的遥控器进行比较。
要查看哪些文件已更改并查看与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/
-
我使用Tower,但你怎么看到已提交但未推送的文件?
-
我认为它也适用于Windows,git-tower.com/p/windows-beta
-
这不回答这个问题。
如果您对远程具有写入权限
git push --dry-run
如果您没有远程写入权限
git diff --stat HEAD remote/branch
您可以通过以下方式列出提交:
然后与以下命令进行比较,其中^等于提交次数(在示例中为2次提交):
-
查看最新提交列表非常好。这不会给出文件的名称。因此,有人回答使用干运行选项和补丁选项更好。 git diff --stat --patch origin master git push --dry-run
只是为了加上我的两分钱......
我想在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;)
希望这会对某人有所帮助。