我如何查看我所做的任何尚未推送到远程存储库的本地提交?有时,git状态会显示我的分支是在origin/master之前提交的X,但并不总是这样。

这是我安装Git的bug,还是我遗漏了什么?


当前回答

一种方法是列出一个分支上可用但另一个分支不可用的提交。

git log ^origin/master master

其他回答

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

git reflog

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

如果你有git子模块。。。

无论您是使用gitcherry-v还是gitlogs@{u}-p、 不要忘记通过git子模块foreach--递归“gitlogs@{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

如果未推出的提交数量是一个位数,通常是一个,那么最简单的方法是:

$ git checkout

git的回应是告诉你,相对于你的起源,你“领先N个提交”。所以现在在查看日志时,请记住这个数字。如果您“领先3次提交”,则历史上前3次提交仍然是私有的。

这不是一个bug。您可能看到的是自动合并失败后的git状态,其中从远程获取更改但尚未合并。

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

git fetch

这是100%安全的,不会模拟您的工作副本。如果有更改,git状态将显示X在原始/主之前提交。

现在,您可以显示远程而非本地的提交日志:

git log HEAD..origin

这给出了origin/master和HEAD之间所有提交的日志:

git log origin/master..HEAD

当HEAD位于主分支上时,这将提供未推送提交的日志。


同样,要查看差异:

git diff origin/master..HEAD