查看未推送的 Git 提交

这篇具有很好参考价值的文章主要介绍了查看未推送的 Git 提交。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问:

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

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

答1:

huntsbot.com – 高效赚钱,自由工作

git log origin/master..HEAD

您还可以使用相同的语法查看差异

git diff origin/master..HEAD

这为我做到了-出于某种原因 git log origin.. 本身就引发了错误。看起来我的本地分支的配置方式也有问题 - 一旦我进行了我在这里找到的更改:wincent.com/blog/… ...问题已解决,我可以再次使用 git status 来查看我想要的内容。

无价之宝:所以我做了git config --global alias.ahead "log origin/master..HEAD --oneline",这样我就可以快速找到我在哪里。更多糖果:for i in *; do echo $i && git ahead 2>/dev/null; done

git log --stat origin/master..HEAD 额外的精彩

这不是最好的解决方案。 Origin/master 可能并不总是上游分支。更好的解决方案是使用@{u} 而不是“origin/master”来指示上游分支。由于默认情况下暗示了 HEAD,因此也可以将其省略。请参阅@Ben Ling 的回答。传出更改:git log @{u}.. 传入更改:git log ..@{u}

@Nocturne 我只想指出,发布此答案时,@{u} 语法尚不可用,仅在 February 12, 2010 上可用。此外,如果本地分支未配置上游,@{u} 将不起作用。最后,@{u} 目前不支持制表符补全,具有制表符补全的 / 仍然是获取此信息的最快方法之一,无论是否配置了上游,它都可以工作。

答2:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

如果您想查看尚未推送的所有分支上的所有提交,您可能正在寻找类似这样的内容:

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 使其更加明显。

请注意,这些命令仅列出尚未在任何分支中推送的提交。例子:假设你有分支开发分支feat-NewThing。您在本地对 feat-NewThing 进行更改。 (日志有变化。)然后你将 feat-newThing 推送到它的远程分支。 (日志为空)。您合并本地专长新事物以在本地开发。假设快进,日志仍然没有变化。

这是实际的解决方案。唯一一个不需要指定分支或需要定义上游的通常工作的。

答3:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

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

git log @{u}..

@{u} 或 @{upstream} 表示当前分支的上游分支(详见 git rev-parse --help 或 git help revisions)。

在 Windows 上,我需要将最后一个参数括在引号中,例如: git log "@{u}.."

git log @{u}.. -p 最有用的选项之一是 -p,它显示了每次确认中引入的差异。

可能更好 git log @{push}.. ,请参阅 another answer。

我发现这是最好的答案。我还发现,如果没有备忘单,我就无法在地球上记住它。为什么 git 开发人员没有选择明显的、符合 git status 的东西,因为我们想知道一个情况的 status。 git status -v 会更有意义。

答4:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

这对我有用:

git cherry -v 

如 Git: See all unpushed commits or commits that are not in another branch 所示。

我认为这应该是主要答案,因为它提供了更简洁的提交列表,而不是所有文件中难以阅读的冗长差异!

git-cherry - “查找尚未应用于上游的提交”,似乎提供了 OP 所要求的内容,但只有提交主题而不是整个提交消息。

值得注意的是,这只会告诉您当前签出的分支上是否有未推送的提交。它不会告诉您是否有未推送提交的本地分支(当前未签出)。

答5:

huntsbot.com – 高效赚钱,自由工作

您可以使用 git log 执行此操作:

git log origin/master..

这假定 origin 是您的上游远程的名称,而 master 是您的上游分支的名称。在 … 之后省略任何修订名称意味着 HEAD,它列出了尚未推送的新提交。

每当我看到带有 git log 和“2-dots-not-3”的答案时,它总是让我想起 stackoverflow.com/questions/53569/… ;)

只是将其添加到答案中 - 如果没有上游设置,此命令会导致说没有设置上游。如果您倾向于使用此命令查看暂存的提交,请运行 git branch --set-upstream master origin/ 以设置上游。

这将与源中的默认分支进行比较,而不是当前的远程分支。

致命:模棱两可的参数“起源..”:未知修订版或路径不在工作树中。

不,它显示了所有不同的最新提交,但不回答原始 Q。

答6:

huntsbot.com – 高效赚钱,自由工作

所有其他答案都谈论“上游”(您从中提取的分支)。但是本地分支可以推送到与其拉出的分支不同的分支。

master 可能不会推送到远程跟踪分支“origin/master”。master 的 upstream 分支可能是 origin/master,但它可以推送到远程跟踪分支 origin/xxx 甚至 anotherUpstreamRepo/yyy。 这些是由 branch.*.pushremote 为当前分支以及 global remote.pushDefault 值设置的。

远程跟踪分支在寻找未推送的提交时计数:跟踪 本地分支 将被推送到的 branch at the remote 的分支。 { 1} 也可以是 origin/xxx 甚至是 anotherUpstreamRepo/yyy。

Git 2.5+(2015 年第二季度)为此引入了一个新的快捷方式:@{push}

请参阅 commit 29bc885、commit 3dbe9db、commit adfe5d0、commit 48c5847、commit a1ad0eb、commit e291c75、commit 979cb24、commit 1ca41a1、commit 3a429d0、commit a9f9f8c、commit 8770e6f、commit da66b27、{ 13}、commit 9e3751d、commit ee2499f [全部从 2015 年 5 月 21 日] 和 commit e41bf35 [2015 年 5 月 1 日] 由 Jeff King (peff) 提供。 (由 commit c4a8354 中的 Junio C Hamano – gitster – 合并,05 2015 年 6 月)

Commit adfe5d0 解释:

sha1_name:实现@{push} 简写

在三角工作流中,每个分支可能有两个不同的兴趣点:您通常从中提取的 @{upstream} 和您通常推送到的目的地。后者没有简写,但它很有用。例如,您可能想知道您尚未推送哪些提交: git log @{push}… 或者作为一个更复杂的示例,假设您通常从 origin/master 拉取更改(您将其设置为您的 @{ upstream}),并将更改推送到您的 fork(例如,作为 myfork/topic)。您可以从多台机器推送到您的分支,这需要您从推送目的地而不是上游集成更改。有了这个补丁,你可以这样做: git rebase @{push} 而不是输入全名。

Commit 29bc885 补充说:

for-each-ref: 接受 “%(push)” 格式

就像我们有 “%(upstream)” 来报告每个 ref 的 “@{upstream}” 一样,这个补丁添加了 “%(push)” 来匹配 “@{push}”。它支持与上游相同的跟踪格式修饰符(因为您可能想知道,例如,哪些分支有提交要推送)。

如果您想查看与您要推送到的分支相比,您的本地分支领先/落后有多少提交:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads

答7:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

我之前有一个提交,没有推送到任何分支,也没有远程或本地。只是提交。其他答案中没有任何东西对我有用,但是:

git reflog

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

如此链接 git-scm.com/docs/git-reflog 中所述,引用日志或“reflogs”记录本地存储库中分支和其他引用的提示何时更新。就我而言,我克隆了一个 repo,创建了一个新分支,删除了该分支,创建了一个新分支,创建了一个提交并更改了提交。所有这些步骤都记录为 HEAD@{0}: commit (amend) : .. HEAD@git-scm.com/docs/git-reflog: commit: ... HEAD@{2}: checkout: 从...移动到 ... HEAD@{ 3}:签出:从...移动到... HEAD@{4}:克隆:来自#sorry格式,显然不允许在评论中使用多行

这也包括原始提交,最好的解决方案是使用@PlagueHammer (stackoverflow.com/a/2016954/624048) 提供的命令

答8:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

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

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

但也确定当前分支名称。

这太棒了!对于那些不熟悉别名的人,只需将它们添加到您的 ~/.gitconfig 文件中的 [alias] 部分。

在 bash 中复制/粘贴不起作用,但该脚本非常有用且易于理解

正如@GaryHaran 指出的那样,这不是 bash 别名。还有一个用于添加别名的 git 命令:git alias 在这种情况下,该命令应该用单引号引起来,以便从 shell 中转义特殊字符。

那将是:git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'

不过,这似乎与 git log @{u}.. 基本相同 - 请参阅 another answer。

答9:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

你可以试试……

gitk

我知道它不是一个纯粹的命令行选项,但如果你安装了它并且在一个 GUI 系统上,这是一个很好的方式来准确地看到你在寻找什么以及更多。

(实际上我有点惊讶到目前为止没有人提到它。)

gitk --all 查看所有分支。

tig 是 ncurses 替代方案。

@justin-ohms gitk 太棒了!从来不知道这存在!方便在漂亮的 UI 中浏览更改。

@ray tig 在“仅限终端”的情况下最有用 - 您无法访问桌面 GUI。第一次了解它!有趣:tig 是 git 的倒数!

答10:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com文章来源地址https://www.toymoban.com/news/detail-429359.html

git branch -v 将针对每个本地分支显示它是否“领先”。

是的,如果分支 devel 上存在未推送的提交,则相应的行将是 * devel 8a12fc0 [ahead 1] commit msg(* 将仅在与签出分支对应的行上)。 ahead 1 表示“提前一个提交”,即有一个未推送的提交。

不是git branch -vv吗?参照。 docs:“如果给出两次,也打印上游分支的名称(另见 git remote show )。”

这不是要打印上游分支的名称,而是要为每个本地分支打印 behind 和/或 ahead,这足以解决 OP 的问题(检测未推送的提交)。 git branch -v 就足够了,刚刚用 Git 2.16.2 再次测试 :)

-vv 很有用,因为它显示了与远程同步的分支和根本未推送的分支之间的差异。 (只有一个 -v,它们在显示中的显示相同。)

答11:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

我使用以下别名仅获取已提交但尚未推送的文件列表(和状态)(对于当前分支)

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

然后做:

git unpushed

看起来很有趣,但在我的情况下 $(git name-rev --name-only HEAD) 是“未定义的”

我不得不将 diff 更改为 git diff,因为它默认使用 diff (GNU diffutils) 3.7

您可以改用“FETCH_HEAD”参考: git config --global alias.unpushed "log FETCH_HEAD..HEAD"

原文链接:https://www.huntsbot.com/qa/PdVn/viewing-unpushed-git-commits?lang=zh_CN&from=csdn

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

到了这里,关于查看未推送的 Git 提交的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git 推送(提交)时如何忽略某个文件或目录?

    1、在工作目录下新建 .gitignore 文件 阿里云效 DevOps 实测! 2、配置忽略规则(支持正则) .gitignore 只能忽略那些原来没有被 track 的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成未 track 状态),然后再提交。

    2024年02月11日
    浏览(54)
  • vscode查看git提交(commit)的记录,及更新当前分支的内容,暂存本地库,提交远程库

    使用 Git Graph插件 ,可以查看git log的不同分支历史提交记录以及每个开发者一次性提交了哪些文件 使用 博客来源:https://www.panziye.com/java/web/3600.html 按如下选择,即可更新内容 将更新后的文件,且需要提交本地库的文件点击 + 按钮 按如下选择 过后会提示要输入提交信息,按

    2024年02月11日
    浏览(64)
  • Docker如何连接至本地私服Harbor中 推送镜像、查看镜像、下载镜像

    win/mac/linux 装有Docker 私服 Harbor Docker中文站 Docker官方站 下载并安装Docker Harbor GitHub Harbor 官方地址 下载并安装 Harbor (测试的话 推荐用Docker镜像来启动Harbor 减少环境问题) 启动后 访问 Harbor 的页面 登录进入 进入后显示 记住这几个关键信息(每个人不一样):地址(172.16.1.77)

    2024年02月06日
    浏览(57)
  • IDEA git 代码已经commit,但未 push推送,如何撤销提交缓存区代码

    记录自己提交代码时,手滑错误commit了多余的文件,但未push到云端,想要撤回整个commit的操作: idea菜单栏上的 VCS–Git–Reset HEAD…     此时按照图中选择回退的方式,以及回退到哪个版本,点击“Reset”即可,在\\\"Version Control\\\" 中 “log” 里,最新一次提交的记录消失即回退

    2024年02月10日
    浏览(71)
  • 解决问题:如何在 Git 中查看提交历史

            可以使用以下命令查看 Git 中的提交历史:         这将显示当前分支上的所有提交历史。每个提交的输出包括提交哈希(SHA-1 值)、作者、日期和提交注释。         您也可以添加一些选项,以获取更详细的提交历史: --oneline 显示单行提交消息 --graph 显

    2024年02月11日
    浏览(40)
  • git上如何通过本地仓库推送自己的代码到远程仓储

    首先我们在gitee或者github上创建一个自己的仓库,github的我就不在展示了,基本上和gitee操作一样 输入相关信息 选择你所需的选项如下:不会选就随便选! 前提条件你安装了 git 不会打开的,Windows10鼠标右键找到 git bash Windows11 的鼠标右键显示更多选项,之后就会展示git bas

    2024年02月10日
    浏览(52)
  • 如何将本地代码提交到git上

    1.首先在github上新建一个仓库 https://gitee.com/projects/new 2.在项目文件夹里右击打开Git Bash Here,设置全局名称和邮件 git config --global user.name “name” git config --global user.email “email” 3.初始化,把当前目录变成git可以管理的仓库,此时项目里多一个【.git】文件 git init 4.将所有文件

    2024年02月05日
    浏览(77)
  • 如何撤消 Git 中最新的本地提交?

    在使用Git进行版本控制时,有时我们可能会犯下错误或者想要撤销最新的本地提交。Git提供了一些强大的工具和命令,使我们能够轻松地撤消最近的提交并修复错误。 本文将详细介绍如何在Git中撤消最新的本地提交。 在撤消最新的本地提交之前,首先需要查看提交历史,以

    2024年02月09日
    浏览(43)
  • VSCode 如何查看git提交的历史记录或逐行记录

    下载两个插件就行了 Git History GitLens 安装成功之后,任意选择一个文件,你鼠标点击哪一行代码,后面都会提示谁在什么时候做了什么,鼠标悬浮提示上便会直接显示作者,版本,时间,点击作者直接可以发邮件,非常方便呢

    2024年02月12日
    浏览(50)
  • 【Git】任何位置查看git日志

    现需要查看指定项目中的某个文件的 Git 日志。如有 项目代码 jflowable ,需要查看其下文件 D:z_workspacejflowablesrcmainjavacomxzbdjflowablecontrollerTestController.java 的日志。 一般的思路是,进入 jflowable 项目,然后使用命令 git log file-path 。如 上述命令在 Linux 操作系统,或使用

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包