1

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

Git:Branch 领先于 X 次提交。没有帮助做 git pull

当我看起来是最新的并且推拉(无文件)修复它时,为什么 git 说我提前 40 次提交?

当我需要 *pull* origin master 时,为什么它会说“您的分支比 origin/master 领先 857 次提交”

总体问题是我拉了一个站点结帐,然后不得不对配置(数据库、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 日志时,似乎我看到合并作为本地提交进入?

小日志片段:

[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 次提交。在对 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 会起作用,但这实质上会使您的更改不合适,然后您可以拉动,然后重新申请,但我无法承受这个小步骤的停机时间,特别是如果它涉及必须整理任何合并冲突。

或者,有没有办法可以以某种方式将这些文件从提交中提取出来,以便我可以推动对所有内容进行排序?

4

1 回答 1

1

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

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

git rebase origin/master

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

git rebase

有些人总是使用变基从远程拉取,如果远程配置为拒绝合并提交,则需要使用变基,但您应该在使用它之前了解变基的作用,请参阅http://git-scm.com/book /en/Git-Branching-Rebasehttp://darwinweb.net/articles/the-case-for-git-rebase

于 2013-02-08T09:32:40.383 回答