Git状态显示X提交前面的本地分支 - 应该只有1

时间:2013-02-08 08:43:46

标签: git git-commit fast-forward

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

  

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状态显示为1。

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

然而,在过去的一个月里,我们一直在开发和修理东西。我们都在各自的分支机构工作,然后合并回一个开发分支,然后从那里到掌握,等等。事情已经准备就绪,我会投入生产并使用'git pull'来降低变化。这似乎运作良好,但我今天注意到状态现在已经改变了。

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

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

小日志摘录:

[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

我怀疑我的回购已被正确“快速转发”,并且在每次拉动后仍然保持1次提前。在对原点/主人进行差异时你可以看到我没有很多变化(貌似)只是配置。这来自原始的配置更改和本地提交。

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

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

或者,有没有办法可以以某种方式将这些文件从提交中删除,以便我可以推送以使所有内容都排序?

1 个答案:

答案 0 :(得分:1)

如果您的本地提交不在origin/master,则不能执行快进,而是必须是合并。当您在遥控器后面时,快速前进,没有本地更改。由于您有本地更改,因此无法快进。

也许你想要的是rebase,它会暂时撤销你的本地提交,快进到远程分支的尖端,然后重新应用你的本地提交作为最后一次提交。

git rebase origin/master

或者,如果将其设置为默认上游,并且您没有使用旧版本的Git,那么

git rebase

有些人始终使用rebasing从远程执行,如果远程配置为拒绝合并提交,则需要使用该功能,但是您应该在使用它之前了解rebasing的功能,请参阅{ {3}}和http://git-scm.com/book/en/Git-Branching-Rebasing