如何查看尚未提交到远程存储库的本地提交内容?有时,git status
会打印出我的分支是X origin/master
,但并非总是如此。
这是我安装的Git的错误,还是我缺少某些东西?
git status --all
应该在2010年出现;或git status -v
实际上应该提供包含额外信息的详细输出。
如何查看尚未提交到远程存储库的本地提交内容?有时,git status
会打印出我的分支是X origin/master
,但并非总是如此。
这是我安装的Git的错误,还是我缺少某些东西?
git status --all
应该在2010年出现;或git status -v
实际上应该提供包含额外信息的详细输出。
Answers:
git log origin/master..HEAD
您也可以使用相同的语法查看差异
git diff origin/master..HEAD
git config --global alias.ahead "log origin/master..HEAD --oneline"
这么多,所以我很快就能知道自己在哪里。更多糖果:for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
带来一点额外的成就
如果要查看尚未推送的所有分支上的所有提交,则可能正在寻找以下内容:
git log --branches --not --remotes
而且,如果您只想查看每个分支上的最新提交以及分支名称,请执行以下操作:
git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
git log master..HEAD
由于存在多个上游,因此正常操作不起作用。这篇文章使我git log MyBranch --not --remotes
展示了一个分支中尚未推送到任何上游的所有提交。
--decorate
也显示分支。--graph
使它更加明显。
您可以显示您在本地但不在上游的所有提交
git log @{u}..
@{u}
或@{upstream}
表示当前分支的上游分支(请参阅git rev-parse --help
或git help revisions
了解详细信息)。
git log @{u}.. -p
-p 是最有用的选项之一,它显示了每个确认中引入的差异。
git log
,“2 -点-不-3”,它总是让我想起stackoverflow.com/questions/53569/... ;)
git branch --set-upstream master origin/<branch>
如果您倾向于使用此命令来查看已暂存的提交,请运行以进行上游设置。
所有其他答案都涉及“上游”(从中提取分支)。
但是,本地分支可以推送到与其所在分支不同的分支。
master
可能不会推送到远程跟踪分支“ origin/master
”。
的上游分支master
可能是origin/master
,但是它可以推送到远程跟踪分支origin/xxx
甚至anotherUpstreamRepo/yyy
。
这些值由branch.*.pushremote
当前分支设置global remote.pushDefault
。
这是远程跟踪分支,寻求unpushed提交时数:在一个轨道branch at the remote
在当地的分支机构将被推到。
该branch at the remote
可再次origin/xxx
或甚anotherUpstreamRepo/yyy
。
<branch>@{push}
请参阅提交29bc885,提交3dbe9db,提交adfe5d0,提交48c5847,提交a1ad0eb,提交e291c75,提交979cb24,提交1ca41a1,提交3a429d0,提交a9f9f8c,提交8770e6f,提交da66b27,提交f052154,提交9e3751d,从5月9日提交 2015],然后提交Jeff King(peff
)提交e41bf35 [2015年5月1日] 。
(由Junio C Hamano合并--gitster
在commit c4a8354中,2015年6月5日)
提交adfe5d0 说明:
sha1_name
:实现@{push}
速记在三角形工作流程中,每个分支可能有两个不同的兴趣点:
@{upstream}
通常从中提取的兴趣点和通常推送到的目的地。后者没有捷径,但是拥有它很有用。例如,您可能想知道尚未推送的提交:
git log @{push}..
或者作为一个更复杂的示例,假设您通常从中拉出更改
origin/master
(将其设置为@{upstream}
),然后将更改推入您自己的个人分叉(例如,作为myfork/topic
)。
您可以从多台机器推送到分叉,需要您整合来自推送目标而不是上游的更改。
有了此补丁,您可以执行以下操作:
git rebase @{push}
而不是输入全名。
提交29bc885添加:
for-each-ref
:接受“%(push)
”格式就像我们为每个参考
%(upstream)
报告“@{upstream}
”一样,此补丁也会添加“%(push)
”来匹配“@{push}
”。
它支持与上游相同的跟踪格式修饰符(例如,因为您可能想知道哪些分支已提交push)。
如果要查看与要推送的分支相比,本地分支在前/后有多少个提交:
git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
方便的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
而且还确定当前的分支名称。
git alias <alias-name> <command>
在这种情况下,该命令应用单引号引起来,以从shell中转义特殊字符。
git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
git branch -v
将为每个本地分支显示是否“提前”。
devel
,则对应的行将是* devel 8a12fc0 [ahead 1] commit msg
(*
仅在与检出的分支对应的行上)。ahead 1
表示“先提交”,即有一个未推动的提交。
git branch -vv
?cf. docs:“如果给出两次,也要打印上游分支的名称(另请参见git remote show <remote>)。”
behind
和/或ahead
对于每个本地分支有关,这足以解决OP的问题(检测未推送的提交)。git branch -v
足够了,只需再次使用Git 2.16.2进行测试即可:)
我之前完成过一次提交,没有推送到任何分支,也没有远程或本地。只是提交。其他答案对我没有任何帮助,但适用于:
git reflog
在那里,我找到了自己的承诺。
我相信执行此操作的最典型方法是执行以下操作:
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}^..'
我建议您去看一下脚本https://github.com/badele/gitcheck,我已经对该脚本进行了编码,以便在所有git存储库中一遍检查,并显示谁尚未提交,谁尚未推送/拉出。
这是一个样本结果
这不是错误。您可能看到的是自动合并失败后的git状态,其中从远程获取的更改已被获取但尚未合并。
要查看本地仓库和远程仓库之间的提交,请执行以下操作:
git fetch
这是100%安全的,不会模拟您的工作副本。如果有变化,将git status
显示X commits ahead of origin/master
。
现在,您可以显示位于远程但不在本地的提交日志:
git log HEAD..origin
有一个名为unpushed的工具可以扫描指定工作目录中的所有Git,Mercurial和Subversion存储库,并显示未提交文件和未推送提交的列表。在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
或官方说明。它还具有cronjob脚本,unpushed-notify
用于在屏幕上通知未提交和未按下的更改。
相似:要查看未合并的分支:
git branch --all --no-merged
这些可能令人怀疑,但我建议cxreg给出答案
如上所述:
git diff来源/主..HEAD
但是,如果您使用的是 git gui
打开gui界面后,选择“存储库”->在“ 可视化历史记录 ”下
注意:有些人喜欢使用CMD提示/终端,而有些人喜欢使用Git GUI(为简单起见)
这是我的便携式解决方案(无需额外安装即可在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
可以使用。
git log @{push}..
。@{push}
在下面的我的答案中