我如何查看我所做的任何尚未推送到远程存储库的本地提交?有时,git状态会显示我的分支是在origin/master之前提交的X,但并不总是这样。
这是我安装Git的bug,还是我遗漏了什么?
我如何查看我所做的任何尚未推送到远程存储库的本地提交?有时,git状态会显示我的分支是在origin/master之前提交的X,但并不总是这样。
这是我安装Git的bug,还是我遗漏了什么?
当前回答
所有其他答案都是关于“上游”(你从中选择的分支)。但是一个本地分支可以推到一个不同于它所从的分支。
主机可能不会推送到远程跟踪分支“origin/master”。master的上游分支可能是origin/master,但它可以推送到远程跟踪分支origin/xxx或甚至另一个UpstreamRepo/yyy。这些值由当前分支的branch.*.pushremote以及全局remote.pushDefault值设置。
在查找未推送的提交时,重要的是远程跟踪分支:在本地分支将被推送到的远程跟踪分支。远程的分支也可以是origin/xxx,甚至是另一个UpstreamRepo/yyy。
Git2.5+(2015年第二季度)引入了一个新的快捷方式:<branch>@{push}
请参见Jeff King(peff)提交的提交29bc885、提交3dbe9db、提交adfe5d0、提交48c5847、提交a1ad0eb、提交e291c75、提交979cb24、提交1ca41a1、提交3a429d0、提供a9f9f8c、提交8770e6f、提交da66b27、提交f052154、提交9e3751d、提交ee2499f[均自2015年5月21日起]和提交e41bf35[2015月1日]。(2015年6月5日,Junio C Hamano--gitster在提交c4a8354中合并)
提交adfe5d0解释:
sha1_name:实现@{push}速记
在三角工作流中,每个分支可能有两个不同的兴趣点:通常从中提取的@{upstream}和通常推送到的目的地。后者没有简写,但有它很有用。例如,您可能想知道哪些提交没有已推送:git-log@{push}。。或者作为一个更复杂的示例,假设您通常从origin/master(您将其设置为@{upstream})拉取更改,并将更改推送到fork(例如,myfork/topic)。您可能会从多台机器推送到分叉,要求您从推送目的地(而不是上游)集成更改。使用此修补程序,您只需执行以下操作:gitrebase@{push}而不是键入全名。
提交29bc885增加了:
对于每个引用:接受“%(push)”格式
正如我们有“%(upstream)”来报告每个ref的“@{upstream}”一样,这个补丁添加了“%(push)”以匹配“@{push}”。它支持与上游相同的跟踪格式修饰符(例如,因为您可能想知道哪些分支具有要推送的提交)。
如果您想查看与您要推送的分支相比,您的本地分支领先/落后的提交数量:
git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
其他回答
如上所述:
git diff origin/master。。头部
但如果您使用的是gitgui
打开gui界面后,选择“Repository”->在“Visualize History”下
注意:有些人喜欢使用CMDPrompt/Terminal,而有些人则喜欢使用GitGUI(为了简单起见)
一种方法是列出一个分支上可用但另一个分支不可用的提交。
git log ^origin/master master
要轻松列出所有分支中的所有未推送提交,可以使用以下命令:
git log --branches @{u}..
有一个名为unpushed的工具,它扫描指定工作目录中的所有Git、Mercurial和Subversion repo,并显示未提交文件和未提交提交的列表。在Linux下安装很简单:
$ easy_install --user unpushed
or
$ sudo easy_install unpushed
以在系统范围内安装。
用法也很简单:
$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)
有关详细信息,请参阅未推送的帮助或官方说明。它还有一个cronjob脚本unpushed notify,用于在屏幕上通知未提交和未推送的更改。
您可以使用git-log执行此操作:
git log origin/master..
这假设origin是上游远程的名称,master是上游分支的名称。在..之后删除任何修订名称。。暗示HEAD,它列出了尚未推送的新提交。