【问题标题】:Git status shows local branch ahead by X commits - should only be 1Git 状态通过 X 次提交显示本地分支 - 应该只有 1
【发布时间】:2023-04-06 11:22:01
【问题描述】:

我一直在堆栈和其他论坛上搜索并尝试各种解决方案,但似乎无法解决此问题。

Git: Branch is ahead by X commits. Doesn't help doing git pull

Why does git say I am 40 commits ahead when I seem up to date and a push-pull (no files) fixes it?

why does it say "Your branch is ahead of origin/master by 857 commits" when I need to *pull* origin master

总体问题是,我拉了一个站点结帐,然后不得不对配置(数据库、api 位置等)进行一些本地更改,并防止每次我继续执行并提交时都必须存储和重新应用这些文件的本地更改。我在 1 个本地提交下完成了所有这些作为“本地配置提交”。而此时 git status 显示其领先 1。

root@web1 web]# git status
 On branch master
 Your branch is ahead of 'origin/master' by 1 commits.

但是,在过去的一个月里,我们一直在开发和修复一些东西。我们都从我们单独的分支中工作,然后合并回一个开发分支,然后从那里到 master 等等。一切准备就绪后,我进入生产环境并使用“git pull”拉下更改。这似乎一直运作良好,但是我今天注意到状态现在已经改变了。

root@web1 web]# git status
On branch master
Your branch is ahead of 'origin/master' by 31 commits.

当我查看针对 origin/master 的 git 日志时,似乎我看到了作为本地提交的合并?

小日志sn-p:

[root@web1 web]# git log origin/master..HEAD 
commit 336743eb411804487ad2f8a2e31701b094fb03f0
Merge: 58c8230 3478924
Author: root <root@web1.(none)>
Date:   Fri Feb 1 15:32:35 2013 -0500

    Merge branch 'master' of http://gitrepo.com/Site

commit 58c82303c523a3c9217dd677ba23582e168007cc
Merge: 6c9de32 0e1c327
Author: root <root@web1.(none)>
Date:   Fri Feb 1 15:04:58 2013 -0500

    Merge branch 'master' of http://gitrepo.com/Site

commit 6c9de32c2fed77e442e73389aa8041f067a23cc4
Merge: ff586b4 52a7ea9
Author: root <root@web1.(none)>
Date:   Fri Feb 1 14:38:08 2013 -0500

    Merge branch 'master' of http://gitrepo.com/Site

我怀疑我的 repo 已经被正确地“快进”了,并且在每次拉取后仍然提前 1 次提交。在对 origin/master 进行比较时,您可以看到我没有太多更改(似乎)只是配置。这是来自原始配置更改和本地提交。

[root@web1 web]# git diff origin/master..HEAD --name-only
application/config/api.php
application/config/config.php
application/config/database.php

我尝试了上面的各种链接,并尝试了获取、更多拉取等,但无济于事。有没有一种方法可以让我的本地仓库正确地快进,这样我只能看到我所做的 1 个本地提交是我的 var 'ahead'?我不能完全将这些更改推送到 master,因为这会导致这些更改被拉到其他安装。然后我想在解决这个问题之后,最好的部署方式是什么,更改一些配置并能够不断更新。根据我的理解 stash 会起作用,但这实质上会使您的更改不合适,然后您可以拉动,然后重新申请,但我无法承受这个小步骤的停机时间,特别是如果它涉及必须整理任何合并冲突。

或者,有没有一种方法可以让我从提交中提取这些文件,以便我可以推送以对所有内容进行排序?

【问题讨论】:

    标签: git git-commit fast-forward


    【解决方案1】:

    如果你有一个不在origin/master 中的本地提交,你就不能进行快进,它必须是一个合并。当您在遥控器后面时,将完成快进,没有本地更改。由于您有本地更改,因此无法快进。

    也许您想要的是变基,这将暂时撤消您的本地提交,快进到远程分支的尖端,然后重新应用您的本地提交作为最后一次提交。

    git rebase origin/master
    

    或者,如果它被设置为默认上游,并且您没有使用旧版本的 Git,则只需

    git rebase
    

    有些人总是使用变基从远程拉取,如果远程被配置为拒绝合并提交,则需要使用变基,但您应该了解变基在使用它之前会做什么,请参阅@ 987654321@和http://darwinweb.net/articles/the-case-for-git-rebase

    【讨论】:

    • 谢谢乔纳森。我以为我已经做到了,但猜想我还没有尝试过。这似乎是我一直在寻找的。我能够成功更新,而且我不仅提前 3 次提交(在发帖时认为是 1 次)。使用 rebase 来拉取开发代码推送看起来也像是我需要继续前进的东西。进行了一些初步测试,情况看起来不错。非常感谢!
    • 我想澄清一下。是 git rebase origin/master 不是短版本。我之前尝试过的简短的git rebase 对我没有任何帮助。在那里添加 origin/master 是让魔法发生的原因。再次感谢。
    • 使用当前版本的 Git 你可以说git rebase,手册说:如果没有指定&lt;upstream&gt;,在branch.&lt;name&gt;.remotebranch.&lt;name&gt;.merge 选项中配置的上游将是用过
    • 是的,我读到了,上游设置为 master,但 git rebase 并没有为我做这件事。我必须在要执行的操作的命令或顺序中指定 origin/master。
    猜你喜欢
    • 2016-01-17
    • 2014-08-23
    • 2020-03-01
    • 2011-06-06
    • 2011-01-26
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多