tag - git提交文件




查看未压入的Git提交 (16)

git branch -v会显示每个本地分支是否“前进”。

我如何查看我所做的任何本地提交,还没有推送到远程存储库? 有时候, git status会打印出来,我的分支是X在origin/master之前提交,但并非总是如此。

这是我的安装Git的错误,还是我错过了什么?


你可以用git log来做到这一点:

git log origin..

假设origin是你上游的名称,在..后隐含任何修订名称暗示HEAD ,其中列出了未被推送的新提交。


做事情的一种方式是列出在一个分支上可用但不是另一个分支上的提交。

git log ^origin/master master

如果您想查看所有尚未推送的分支上的所有提交,则可能需要查找如下所示的内容:

git log --branches --not --remotes

如果您只想查看每个分支上最近的提交以及分支名称,请执行以下操作:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline

您可以显示您在本地但不在上游的所有提交

git log @{u}..

@{u}@{upstream}表示当前分支的上游分支(有关详细信息,请参阅git rev-parse --helpgit help revisions )。


我之前做过一个提交,没有推送到任何分支,也没有推送到远程或本地。 只是承诺。 没有其他答案为我工作,但是:

git reflog

在那里我找到了我的承诺。


我建议你去看脚本https://github.com/badele/gitcheck ,我已经编写了这个脚本来检查所有你的git仓库,并显示谁没有提交,谁没有推/拉。

这里有一个示例结果


我相信这样做的最典型的方式是运行如下的东西:

git cherry --abbrev=7 -v @{upstream}

不过,我个人更喜欢跑步:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

其中显示了所有没有合并到上游的分支的提交以及上游的最后一个提交 (显示为所有其他提交的根节点)。 我经常使用它,因此我为它创建了别名。

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'

方便的git别名,用于在当前分支中查找unpushed提交:

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

但也决定当前分行名称。


有一个名为unpushed工具,可扫描指定工作目录中的所有Git,Mercurial和Subversion repos,并显示提交的文件列表和未提交的提交。 在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 --helpunpushed 。 它还有一个cronjob脚本unpushed-notify屏幕上未完成和未修改更改的通知。


要轻松列出所有分支中的所有未提交的提交可以使用以下命令:

 git log --branches  @{u}..

这不是一个错误。 你可能看到的是自动合并失败后的git状态,其中来自远程的更改被提取但尚未合并。

要查看本地回购和远程之间的提交,请执行以下操作:

git fetch

这是100%安全的,不会模拟你的工作副本。 如果有变化, git status显示X commits ahead of origin/master

您现在可以显示远程但不在本地的提交日志:

git log HEAD..origin


这是我的便携式解决方案(shell脚本,它也可以在Windows上运行,无需额外安装),它显示了所有分支的来源差异: git-fetch-log

示例输出:

==== 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 <b[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

传递给日志的参数,例如--oneline--patch可以使用。


git diff origin

假设您的分支设置为追踪原点,那么应该会显示您的差异。

git log origin

会给你提交的摘要。


git log origin/master..HEAD

您也可以使用相同的语法查看diff

git diff origin/master..HEAD




git-log