Git - 查找哪些提交是本地的

Git - Find which commits are local

我怎么知道哪些本地提交不在远程?

通过,git log 我看到了提交历史,但我想知道最后一次提交是否已经被推送到服务器或只是一个本地提交。有没有办法不用去服务器和匹配本地历史就能知道?

复制最后一个提交哈希,并查看存在该提交的分支列表。
如果您看到 remote/origin/<branch-name>,那么您已经按下了 last commit

$ git fetch
$ git log                                    # copy last commit-hash
$ git branch -a --contains <last-commit-hash>

# Or, (skip copying commit-hash)
$ git fetch && git branch -a --contains $(git rev-list -n 1 HEAD)

是的,您可以通过git log origin/master..master查看。

如果有输出,则显示的是你没有推送到远程的日志。如果没有输出,说明你当前的分支和master一样。

注意:如果git遥控器也被其他人使用,你最好先从origin中获取然后比较。

Git有很多快捷方式,例如HEAD指的是当前分支的尖端,而@{upstream} 指的是远程分支的头(或最后推送的提交)。例如,这些快捷方式对于在别名中使用非常宝贵,因此您不会被限制使用像 master 这样的分支名称和像 origin 这样的固定远程名称。

使用 git 日志;

git log @{upstream}..HEAD

我用下面的

git config alias.changes "log --graph --abbrev-commit --decorate --date=relative --pretty=terse @{upstream}...HEAD"

然后我简单地使用

git changes

列出我当前分支中未推送的更改。

注意:如果@{upstream}好像不行,注意-u或者--set-upstream git push 中的选项。使用 git push -u origin master 将确保 origin/master 被视为分支 master 的上游存储库。然后 @{upstream} 快捷方式应该可以正常工作。

终于找到线索了,

git status

On branch dev
Your branch is ahead of 'origin/dev' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

Git status 还显示当前分支从远程提交的数量。

感谢@Danh 的评论