7

伙计们,

这是 git 中的一些东西,对我来说没有意义,这就是发生的事情

  • 我做了一个git status,我看到我在分支 master 上,没有什么要提交的,工作目录是干净的。
  • 然后git pull origin master我会拉一堆代码,没有问题。
  • 现在当我这样做时,git status我看到一个新行Your branch are ahead of origin/master by 1 commit

我的本地 repo 和远程 repo 完全同步,你的分支在 origin/master 之前 1 提交意味着什么,这非常令人困惑。

4

4 回答 4

9

我亲身经历了你所看到的。我在 git-scm.com 上找不到正确的解释,但我相信它是这样的:

  1. 我从 origin 克隆了一个 repo,假设 origin 有 master 并且我现在在我的本地 repo 中有 master
  2. 现在 origin 和您的 repo 引用了最后一次提交。此参考是主分支,并且该参考在您的本地仓库和原点上是相同的
  3. 假设某人(除您之外)将新提交推送到原始主机
  4. 你做git pull origin master
  5. 现在你这样做git status了,你会看到你的分支提前到了 origin/master,即使你在本地 repo 中没有新的提交,也没有什么可推送的!(在此示例中,自第 1 步(克隆)以来,您没有在本地提交任何新内容)

git pull origin==>当我在主人时,我通过做一个来解决这个问题。

Agit pull origin master会将所有新提交从原始分支拉到您的本地分支。

Agit pull origin还将重新设置您对 master 的引用,等于 master 在 origin 上引用的提交!(如果没有发生这种情况,git-bash 只会认为您前面有很多提交!因为在提交树中,在您的主引用所在的提交之后有很多提交!)

这对你有意义吗?它对我有用:)

也请随时用确凿的证据/文件来支持我的观点:)

于 2013-03-22T14:40:15.510 回答
4

您已在本地计算机上添加了一个提交,该提交尚未发送到远程服务器。

如果您确信您的修改应该与远程存储库共享,则使用以下git push命令将提交发送到远程:

git push orgin master:master
于 2013-03-22T13:26:53.503 回答
1

正如您所想的那样,您并没有与远程存储库 100% 同步。您拥有远程存储库中的所有内容,是的。但是您的本地 master 领先于 origin/master 一个提交。

运行它,并向我们展示结果:

git log --all --graph --pretty=format:'%h %d %s'

我希望看到类似的东西:

* (master) Commit D
* (origin/master) Commit C
* Commit B
* Commit A

如果我正确阅读了您的帖子,那么您将提前提交一次,因为您有 D 而远程分支位于 C。您必须将git push提交 D 推送到远程存储库。然后你将 100% 同步。

于 2013-03-22T14:49:57.540 回答
0

实际上,您假设您的本地分支和远程分支是同步的。如果说您的本地分支比 origin/master 早 1 次提交,那么肯定是。我们都信任 GIT。

用这个来测试。

git checkout master // You move to master branch
cat .git/HEAD //shows the commit on which HEAD is pointing to

git checkout origin/master //you switch to origin master branch
cat .git/HEAD 

如果您在本地 master 和远程 master 分支中看到 HEAD 指向相同的提交,那么两者都是同步的。

如果您的本地分支在 1 次提交之前,只需将其推送(如果需要)到您的远程分支

git push origin master
于 2013-03-22T14:20:29.957 回答