Git - '你的分支在“X”提交之前是“X”。

Posted

技术标签:

【中文标题】Git - \'你的分支在“X”提交之前是“X”。【英文标题】:Git - 'Your branch is ahead of "X" by "X" commits.'Git - '你的分支在“X”提交之前是“X”。 【发布时间】:2021-10-20 11:29:04 【问题描述】:

我一个人在做一个项目,它有两个分支:主分支和部署分支。 这是我正在运行的命令和我在终端中收到的消息的概要。 关于分支部署:git status 您的分支领先于 'origin/deployment' 13 次提交。 (使用“git push”发布你的本地提交) 没有什么可提交的,工作树干净' 关于分支部署:git push https://github.com/name 一切都是最新的 关于分支部署:git status 关于分支部署 您的分支领先于 'origin/deployment' 13 次提交。 (使用“git push”发布你的本地提交) 没有什么可提交的,工作树干净' 关于分支部署:git checkout main 主要的 切换到分支'main' 您的分支领先于 'origin/main' 2 次提交。 (使用“git push”发布你的本地提交) 在主分支上:git push https://github.com/name 一切都是最新的 在主分支上:git status 在分支主 您的分支领先于 'origin/main' 2 次提交。 (使用“git push”发布你的本地提交) 没有什么可提交的,工作树干净

因此,在我将 main 与部署合并并推送到 github 后,我得到了这个 git 历史记录。一切都没有错误。插入和删除都应用于实时站点。 如您所见,我的历史显示我仍然有要推送的更改,但是当我推送任何内容时,如果我运行 git status 在它说我仍然有要推送的更改之后运行。 tarnations 发生了什么? 运行 git 远程 -v (fetch) 和 (push) 来源都匹配 运行 git fetch 76373fb...22b0csd 主 -> 原点/主 019287b...22b0csd 部署 -> 源/部署

【问题讨论】:

运行git remote -v 并查看结果以查看originfetchpush)与github.com/name 匹配? 在运行 git remote -v (fetch) 和 (push) origins match 之后 您已经运行 git fetch 以确保您的本地来源/分支机构是最新的? 在运行 git fetch 我认为我看到的是指向同一个提交的两个不同的提交看起来像这个 83217fb...22b0csd 第一组数字不同第二组相同。查看帖子进行编辑 请注意,git push 执行 Git 所称的 机会性更新 以远程跟踪名称,例如 origin/main。运行git fetchgit fetch origin 将对您的远程跟踪名称的所有 进行一次一次性更新,从而无需一次机会地更新一个名称。此外,一些非常古老的 Git 版本(仍然在使用)在某些更新方面不好;运行 git fetchgit fetch origin 说服他们正确更新。这一切都由 Git 1.9 版修复,但如果你的 Git 比这更旧...... 【参考方案1】:

第一个问题:

Git - '你的分支在“X”提交之前领先于“X”。'

这是一条常见的信息:通常无需担心。

第二个问题:

如您所见,我的历史显示我有一些更改要推送,但是 当我推送任何东西时,如果我在它之后运行 git status 说我还有更改要推送。

请运行git fetch

就我个人而言,我通常运行git pull --all

这是一个很好的讨论:

Git Fetch vs Pull: What's the Difference Between the Git Fetch and Git Pull Commands?

【讨论】:

在运行 git fetch 并检查两个分支上的 git 状态后,它说两个分支都是最新的,没有什么可提交的。为什么会这样呢?所以 fetch 将远程数据带到我的本地副本,但我的本地副本是最新版本,那么为什么我需要首先获取?是什么原因导致我以前从未遇到过这个问题 简短答案:这就是 Git 的工作方式 :) 更长的答案:在每个分支(“master”和“deployment”)和每个 repos(“remote”和“ local") 直到您确信“一切正常”。强烈建议:如果您还没有,请获取“GUI”Git 客户端来分析您的分支历史记录。如果您使用的是 Windows,我建议您使用 Git GUI 和/或 Tortoise Git。我两个都用:) @Colinthedev1:显然,至少在这种情况下,您的本地副本 没有 与另一个(远程)Git 保持同步,因为您拥有相同的提交,但你的 Git还不知道他们有相同的提交。 git fetch 操作让您的 Git(您的软件与您的存储库对话)连接到他们的 Git 并同步您的 Git 对其状态的了解,同时还获取任何新的提交。如果他们从来没有任何新的提交,那很好,但您仍然可以获得同步:您的 Git 现在知道他们的。 @paulsm4:我会避免使用git pull --all。 (好吧,我通常完全避免使用git pull,但这不是我的意思。)--all 选项只是传递给git fetch,它表示所有遥控器。这对git pull 来说是一件奇怪的事情,因为git pull 将运行的second 命令将仅使用从one 获得的one 提交哈希ID i> 远程。

以上是关于Git - '你的分支在“X”提交之前是“X”。的主要内容,如果未能解决你的问题,请参考以下文章

Git最常用命令

git:切换分支并忽略任何更改而不提交

推送提交(git push)

关于git的分支

git提交问题:git提交时提示如下信息,没有将本地文件提交到服务器,是怎么回事

Git:如何列出此分支上的提交而不是合并分支上的提交