如何查看我所做的任何尚未推送到远程存储库的本地提交?有时,git status
会打印出我的分支是X提交origin/master
之前,但并非总是如此。
这是我安装Git的错误,还是我错过了什么?
答案 0 :(得分:1589)
git log origin/master..HEAD
您还可以使用相同的语法
查看差异git diff origin/master..HEAD
答案 1 :(得分:639)
如果你想看到所有尚未推送的分支上的所有提交,你可能正在寻找这样的东西:
git log --branches --not --remotes
如果您只想查看每个分支上的最新提交以及分支名称,请执行以下操作:
git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
答案 2 :(得分:288)
您可以使用
显示您在本地但不在上游的所有提交git log @{u}..
@{u}
或@{upstream}
表示当前分支的上游分支(有关详细信息,请参阅git rev-parse --help
或git help revisions
。)
答案 3 :(得分:145)
答案 4 :(得分:60)
答案 5 :(得分:37)
用于在当前分支中查找未提交的提交的方便的git别名:
alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline
这基本上是做什么的:
git log origin/branch..branch
但也确定当前分支名称。
答案 6 :(得分:36)
所有其他答案都谈及"上游" (你拉的分支)。
但是本地分支可以推送到不同的分支而不是它所从的分支。
master
可能无法推送到远程跟踪分支" origin/master
"。
master
的上游分支可能是origin/master
,但可以推送到远程跟踪分支origin/xxx
甚至是anotherUpstreamRepo/yyy
。
这些由branch.*.pushremote
为当前分支设置,并带有global remote.pushDefault
值。
远程跟踪分支在寻求未提交的提交时计数:跟踪本地分支将被推送到的branch at the remote
的提交。
branch at the remote
可以是origin/xxx
甚至是anotherUpstreamRepo/yyy
。
<branch>@{push}
请参阅commit 29bc885,commit 3dbe9db,commit adfe5d0,commit 48c5847,commit a1ad0eb,commit e291c75,commit 979cb24,{{3} },commit 1ca41a1,commit 3a429d0,commit a9f9f8c,commit 8770e6f,commit da66b27,commit f052154,commit 9e3751d [全部自2015年5月21日起] ,commit ee2499f [2015年5月1日] commit e41bf35
(由Jeff King (peff
)合并于Junio C Hamano -- gitster
--,2015年6月5日)
commit c4a8354解释说:
sha1_name
:实施@{push}
简写在三角形工作流程中,每个分支可能有两个不同的兴趣点:您通常从中拉出的
@{upstream}
,以及您通常推送到的目的地。对于后者没有简写,但它有用。例如,您可能想知道自己没有提交哪些内容 推了:
git log @{push}..
或者作为一个更复杂的示例,假设您通常从
origin/master
(您设置为@{upstream}
)中提取更改,并将更改推送到您自己的个人分叉(例如,{{1 }})。
您可以从多台机器推送到您的前叉,要求您集成来自推送目的地的更改,而不是上游。 使用此补丁,您可以执行以下操作:
myfork/topic
而不是输入全名。
Commit adfe5d0补充道:
git rebase @{push}
:接受&#34;for-each-ref
&#34;格式就像我们有&#34;
%(push)
&#34;报告&#34;%(upstream)
&#34;对于每个参考,此补丁添加&#34;@{upstream}
&#34;匹配&#34;%(push)
&#34;。
它支持与上游相同的跟踪格式修饰符(因为您可能想知道,例如,哪些分支具有提交的提交)。
如果您想查看与您要推送的分支相比,您的本地分支机构提交了多少次提前/后退:
@{push}
答案 7 :(得分:33)
你可以尝试......
gitk
我知道它不是一个纯粹的命令行选项,但是如果你安装了它并且在GUI系统上,它是一个很好的方式来查看你正在寻找的东西以及更多。
(到目前为止,我真的没有人提到它。)
答案 8 :(得分:27)
git branch -v
将为每个本地分支显示它是否“未来”。
答案 9 :(得分:20)
我使用以下别名来获取已提交但尚未推送的文件列表(以及状态)(对于当前分支)
git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"
然后就这样做:
git unpushed
答案 10 :(得分:12)
我认为最常见的做法是运行类似:
git cherry --abbrev=7 -v @{upstream}
但是,我个人更喜欢跑步:
git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..
显示来自所有分支的提交,这些分支未合并到上游,加上上一次提交(显示为所有其他提交的根节点) 。我经常使用它,因为我为它创建了别名noup
。
git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
答案 11 :(得分:9)
我之前完成了提交,没有推送到任何分支,也没有推送到远程或本地。只是提交。其他答案对我没有任何帮助,但是:
git reflog
我找到了我的提交。
答案 12 :(得分:9)
我建议你去看看脚本https://github.com/badele/gitcheck,我编写了这个脚本,一次性检查你所有的git存储库,它显示谁没有提交,谁没有推/拉。
此处有一个示例结果
答案 13 :(得分:8)
这不是一个错误。您可能看到的是自动合并失败后的git状态,其中提取了远程更改但尚未合并。
要查看本地repo和remote之间的提交,请执行以下操作:
git fetch
这是100%安全的,不会模拟您的工作副本。如果有更改git status
将显示X commits ahead of origin/master
。
现在,您可以显示远程但不在本地的提交日志:
git log HEAD..origin
答案 14 :(得分:8)
git cherry -v
这将列出您的本地评论记录(尚未推送)及相应的消息
答案 15 :(得分:7)
这对我来说效果更好:
git log --oneline @{upstream}..
或:
git log --oneline origin/(remotebranch)..
答案 16 :(得分:7)
有一个名为unpushed的工具可以扫描指定工作目录中的所有Git,Mercurial和Subversion存储库,并显示ucommited文件列表和未提交的提交。 在Linux下安装很简单:
$ easy_install --user unpushed
或
$ 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)
有关详细信息,请参阅unpushed --help
或official description。它还有一个cronjob脚本unpushed-notify
,用于屏幕上显示未通知和未刷新的更改。
答案 17 :(得分:4)
类似:查看未合并的分支:
git branch --all --no-merged
那些可能是可疑的,但我推荐cxreg的答案
答案 18 :(得分:4)
要轻松列出所有未分支的提交所有分支,您可以使用此命令:
git log --branches @{u}..
答案 19 :(得分:3)
如果未推出的提交数量是一位数,这通常是最简单的方法:
$ git checkout
git回应告诉你你是&#34;提前N提交&#34;相对你的起源。所以现在只需在查看日志时记住这个数字。如果您提前3次提交&#34;,则历史记录中的前3次提交仍然是私有的。
答案 20 :(得分:2)
一种做法是列出一个分支上可用的提交,而不是另一个分支上的提交。
git log ^origin/master master
答案 21 :(得分:1)
如上所述:
git diff origin / master..HEAD
但是,如果您使用的是 git gui
打开gui界面后,选择“存储库”->在“ 可视化历史记录 ”下
注意:有些人喜欢使用CMD提示/终端,有些人喜欢使用Git GUI(为简单起见)
答案 22 :(得分:0)
无论您使用 git cherry -v
还是 git logs @{u}.. -p
,请不要忘记通过以下方式包含您的子模块
git submodule foreach --recursive 'git logs @{u}..'
。
我正在使用以下 bash 脚本来检查所有这些:
unpushedCommitsCmd="git log @{u}.."; # Source: https://stackoverflow.com/a/8182309
# check if there are unpushed changes
if [ -n "$($getGitUnpushedCommits)" ]; then # Check Source: https://stackoverflow.com/a/12137501
echo "You have unpushed changes. Push them first!"
$getGitUnpushedCommits;
exit 2
fi
unpushedInSubmodules="git submodule foreach --recursive --quiet ${unpushedCommitsCmd}"; # Source: https://stackoverflow.com/a/24548122
# check if there are unpushed changes in submodules
if [ -n "$($unpushedInSubmodules)" ]; then
echo "You have unpushed changes in submodules. Push them first!"
git submodule foreach --recursive ${unpushedCommitsCmd} # not "--quiet" this time, to display details
exit 2
fi
答案 23 :(得分:0)
这是我的便携式解决方案(在Windows上也可以在没有额外安装的情况下运行的shell脚本),它显示了与所有分支的原点的差异:git-fetch-log
示例输出:
==== branch [behind 1]
> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date: 2016-03-10 09:11:11 +0100
|
| Commit on remote
|
o commit 2304667 (branch)
Author: BimbaLaszlo <bimbalaszlo@gmail.com>
Date: 2015-08-28 13:21:13 +0200
Commit on local
==== master [ahead 1]
< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date: 2016-03-25 21:42:55 +0100
|
| Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
Author: BimbaLaszlo <bimbalaszlo@gmail.com>
Date: 2016-03-10 09:02:52 +0100
Commit on remote
==== test [ahead 1, behind 1]
< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date: 2016-03-25 22:50:00 +0100
|
| Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/ Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date: 2016-03-14 10:34:28 +0100
|
| Pushed remote
|
o commit 0fccef3
Author: BimbaLaszlo <bimbalaszlo@gmail.com>
Date: 2015-09-03 10:33:39 +0200
Last common commit
为日志传递的参数,例如可以使用--oneline
或--patch
。
答案 24 :(得分:-3)
git show
将显示本地提交中的所有差异。
git show --name-only
将显示本地提交ID和提交名称。
答案 25 :(得分:-6)
git diff origin
假设您的分支设置为跟踪原点,那么应该显示差异。
git log origin
将为您提供提交摘要。