Viewing Unpushed Git Commits
如何查看尚未推送到远程存储库的任何本地提交?有时,
这是我安装Git时的错误,还是我丢失了什么?
1 | git log origin/master..HEAD |
您还可以使用相同的语法查看diff
1 | git diff origin/master..HEAD |
如果您希望看到所有尚未推送的分支上的所有提交,那么您可能正在寻找类似这样的内容:
1 | git log --branches --not --remotes |
如果您只想查看每个分支上最近的提交以及分支名称,那么:
1 | git log --branches --not --remotes --simplify-by-decoration --decorate --oneline |
您可以显示您在本地但不是在上游的所有提交
1 | git log @{u}.. |
这对我很有用:
1 | git cherry -v |
正如在git中所指出的:查看不在另一个分支中的所有未执行的提交或提交。
您可以使用
1 | git log origin.. |
假设
在当前分支中查找未完成提交的Handy Git别名:
1 | alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline |
它的基本功能是:
1 | git log origin/branch..branch |
但也决定了当前的分支名称。
所有其他答案都是关于"上游"(你拉的分支)的。但是,一个本地分支可以推到一个不同于它拉过来的分支。
这是一个远程跟踪分支,它在寻找未完成的提交时起作用:跟踪
请参见Jeff King的Commit 29BC885、Commit 3dbe9db、Commit adfe5d0、Commit 48c5847、Commit A1ad0eb、Commit E291c75、Commit 979cb24、Commit 1Ca41a1、Commit 3a429d0、Commit A9f9f8c、Commit 8770e6f、Commit DA66b27、Commit F052154、Commit 9e3751d、Commit ee2499f[从2015年5月21日起]、Commit E41bf35[2015年5月1日](
提交adfe5d0解释:
sha1_name : implement@{push} shorthandIn a triangular workflow, each branch may have two distinct points of interest: the
@{upstream} that you normally pull from, and the destination that you normally push to. There isn't a shorthand for the latter, but it's useful to have.For instance, you may want to know which commits you haven't
pushed yet:
1 | git log @{push}.. |
Or as a more complicated example, imagine that you normally pull changes from
origin/master (which you set as your@{upstream} ), and push changes to your own personal fork (e.g., asmyfork/topic ).
You may push to your fork from multiple machines, requiring you to integrate the changes from the push destination, rather than upstream.
With this patch, you can just do:
1 | git rebase @{push} |
rather than typing out the full name.
提交29BC885,添加:
for-each-ref : accept"%(push) " formatJust as we have"
%(upstream) " to report the"@{upstream} " for each ref, this patch adds"%(push) " to match"@{push} ".
It supports the same tracking format modifiers as upstream (because you may want to know, for example, which branches have commits to push).
如果您想查看与您要提交的分支相比,您的本地分支在前面/后面有多少提交:
1 | git for-each-ref --format="%(refname:short) %(push:track)" refs/heads |
你可以试试……
1 | gitk |
我知道这不是一个纯粹的命令行选项,但是如果你已经安装了它,并且在一个图形用户界面系统上,这是一个很好的方法,可以确切地看到你在寻找什么以及更多。
(实际上,到目前为止还没人提到这件事,我有点惊讶。)
我使用以下别名仅获取已提交但尚未推送的文件列表(以及状态)(对于当前分支)
1 2 | git config --global alias.unpushed \ "diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status" |
那么就这样做:
1 | git unpushed |
我认为最典型的方法是运行如下内容:
1 | git cherry --abbrev=7 -v @{upstream} |
但是,我个人更喜欢跑步:
1 | git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^.. |
它显示所有未在上游合并的分支的提交,加上上游的最后一次提交(显示为所有其他提交的根节点)。我经常使用它,所以为它创建了别名
1 2 | git config --global alias.noup \ 'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..' |
我以前做过一个提交,没有推到任何分支,也没有远程或本地。只是承诺。其他答案对我没有任何帮助,但有:
1 | git reflog |
在那里我找到了我的承诺。
我建议你去看看脚本https://github.com/badele/git check,我已经为这个脚本编码了一次签入所有的git存储库,它显示了谁没有提交,谁没有推/拉。
这里是一个示例结果
这不是虫子。您可能看到的是自动合并失败后的git状态,其中从远程获取更改,但尚未合并。
要查看本地回购和远程回购之间的承诺,请执行以下操作:
1 | git fetch |
这是100%安全,不会模拟您的工作副本。如果有变化,
现在,您可以显示远程而非本地提交的日志:
1 | git log HEAD..origin |
1 | git cherry -v |
这将列出您的本地评论历史记录(尚未推送)和相应的消息。
这对我更有效:
1 | git log --oneline @{upstream}.. |
或:
1 | git log --oneline origin/(remotebranch).. |
有一个名为unpushed的工具,它扫描指定工作目录中的所有git、mercurial和subversion repo,并显示未命令文件和未取消提交的列表。在Linux下安装很简单:
1 | $ easy_install --user unpushed |
或
1 | $ sudo easy_install unpushed |
安装全系统。
使用也很简单:
1 2 3 4 | $ unpushed ~/workspace * /home/nailgun/workspace/unpushed uncommitted (Git) * /home/nailgun/workspace/unpushed:master unpushed (Git) * /home/nailgun/workspace/python:new-syntax unpushed (Git) |
更多信息请参见
要轻松列出所有分支中所有未取消的提交,可以使用以下命令:
1 | git log --branches @{u}.. |
类似:要查看未合并的分支:
1 | git branch --all --no-merged |
这些可能是可疑的,但我建议CxReg给出答案。
如果没有推出的提交数是一个数字,通常是一个数字,那么最简单的方法是:
1 | $ git checkout |
Git的回应是告诉你,相对于你的来源,你处于"领先N提交"状态。所以现在在查看日志时要记住这个数字。如果你是"领先3个承诺",那么历史上排名前3的承诺仍然是私有的。
一种方法是列出一个分支上可用但另一个分支上不可用的提交。
1 | git log ^origin/master master |
这是我的可移植解决方案(shell脚本也可以在Windows上运行,不需要额外安装),它显示了所有分支与源站的区别:git fetch log
示例输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | ==== branch [behind 1] > commit 652b883 (origin/branch) | Author: BimbaLaszlo <[email protected]> | Date: 2016-03-10 09:11:11 +0100 | | Commit on remote | o commit 2304667 (branch) Author: BimbaLaszlo <[email protected]> Date: 2015-08-28 13:21:13 +0200 Commit on local ==== master [ahead 1] < commit 280ccf8 (master) | Author: BimbaLaszlo <[email protected]> | Date: 2016-03-25 21:42:55 +0100 | | Commit on local | o commit 2369465 (origin/master, origin/HEAD) Author: BimbaLaszlo <[email protected]> Date: 2016-03-10 09:02:52 +0100 Commit on remote ==== test [ahead 1, behind 1] < commit 83a3161 (test) | Author: BimbaLaszlo <[email protected]> | Date: 2016-03-25 22:50:00 +0100 | | Diverged from remote | | > commit 4aafec7 (origin/test) |/ Author: BimbaLaszlo <[email protected]> | Date: 2016-03-14 10:34:28 +0100 | | Pushed remote | o commit 0fccef3 Author: BimbaLaszlo <[email protected]> Date: 2015-09-03 10:33:39 +0200 Last common commit |
可使用为日志传递的参数,如
1 | git show |
将显示本地提交中的所有差异。
1 | git show --name-only |
将显示本地提交ID和提交名称。
1 | git diff origin |
假设您的分支被设置为跟踪原点,那么这将显示出差异。
1 | git log origin |
将为您提供提交的摘要。