查看未推送的Git提交
问题:如何查看未推送的Git提交记录?
出现原因:在本地分支上进行了一些提交,但尚未将这些提交推送到远程仓库。需要找到一种方法来查看这些未推送的提交记录。
解决方法:
1. 使用以下命令查看所有在origin/master和HEAD之间的提交记录:
git log origin/master..HEAD
当HEAD指向master分支时,这将显示未推送的提交记录。
2. 同样地,可以使用以下命令查看差异:
git diff origin/master..HEAD
3. 如果出现错误,可能是由于本地分支配置的问题。可以根据以下链接(https://wincent.com/blog/your-branch-is-ahead-of-origin-master-by-1-commit)中的更改来解决问题。
4. 可以通过以下命令设置一个别名来快速查看当前所在位置:
git config --global alias.ahead "log origin/master..HEAD --oneline"
然后可以使用git ahead
命令快速查看当前所在位置。
5. 如果想要额外的信息,可以使用以下命令查看每个提交的统计信息:
git log --stat origin/master..HEAD
6. 若要查看仅自己的提交记录,可以自定义命令,例如:
git diff origin/MYBRANCH..HEAD | grep index
7. 对于Tortoise Git用户,可以参考相关文档来实现相同的功能。
8. 注意,git diff @{push}..HEAD
命令将显示当前上游位置和HEAD之间的差异,这也可能包括上游的进展(被还原的提交)。如果只想查看本地更改,可以使用三个点:git diff @{push}...HEAD
。
9. 有人建议使用git log --branches --not --remotes
命令来查看未推送的提交记录,但有人指出这种方法会显示所有未推送的提交,包括在其他分支上提交但尚未推送的提交。
10. 还有其他一些命令和选项可以用于查看未推送的提交记录,可以参考相关文档来获取更多信息。
要查看未推送的Git提交记录,可以使用git log origin/master..HEAD
命令。如果遇到错误,可以检查本地分支配置是否正确。还可以使用其他命令和选项来获取更多的提交信息。
问题:如何查看未推送的Git提交?
原因:想要查看本地但未推送到上游的所有提交。
解决方法:
可以使用以下命令来查看本地但未推送的所有提交:
git log @{u}..
其中,`@{u}`或`@{upstream}`表示当前分支的上游分支。在Windows系统中,需要将最后一个参数用引号括起来,例如:
git log "@{u}.."
如果想要查看每个提交引入的差异,可以使用`-p`选项:
git log @{u}.. -p
另外,可能更好的解决方法是使用`git log @{push}..`,具体可参考[这个答案](https://stackoverflow.com/a/30720302/21499)。
作者发现这是最好的解决方法,但是也发现不太可能记住这个命令,所以建议创建一个备忘录。并且作者认为为何Git开发人员没有选择一些更明显且与`git status`一致的命令,因为我们想要了解的是当前情况的状态。例如,`git status -v`会更有意义。
查看未推送的Git提交的原因可能是想要了解当前分支上的所有提交以及它们是否已经被推送到远程仓库。解决方法是使用以下命令:
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` 选项可以更清晰地显示提交之间的关系。
- 注意这些命令只列出了在任何分支上尚未推送的提交。例如,假设有一个 `develop` 分支和一个 `feat-NewThing` 分支。在 `feat-NewThing` 分支上进行了本地更改(日志中有更改),然后将 `feat-NewThing` 推送到远程分支(日志为空)。然后在本地将 `feat-NewThing` 分支合并到 `develop` 分支。假设是快进合并,日志仍然没有更改。
- 所提供的解决方法是通用的,无需指定分支或定义上游分支即可使用。
- 即使对于未为分支配置上游分支的情况,这个解决方法也适用。
- 有人提出了另一种方式,即使用 `git log HEAD --not --remotes` 来查看当前分支上的未推送提交。
总之,通过使用 `git log --branches --not --remotes` 命令可以查看未推送的Git提交。这对于了解哪些提交尚未推送到远程仓库是非常有用的,并且可以根据需要进行相应的操作。