2016-02-04 82 views
1

所以我的一个分支“somebranch,”我回去主机通过git checkout master。我得到消息“On Branch Master您的分支与'origin/master'是最新的。没有提交,工作目录干净。”这是我做git状态时出现的相同信息。git的结帐和git状态都说我上最新的,但随后的git拉取不同的

但后来我做git pull,它拉两个变化掌握。我检查了git log,似乎在3分钟前掌握了一项新的承诺。 git status有滞后吗?我只是做了一个git status,它再次说我是最新的。我尝试了另一个拉之后,它拉了一个新的分支,但没有改变主 - 我可以理解,因为git status可能只检查我的当前分支是否是最新的。但有人可以解释git status如何工作,为什么看起来有滞后?

问题2:此刻我的git的工作流程是这样的:

  1. git checkout master
  2. git pull(让我上的最新版本)
    • 现在我想对一些问题的工作一个新分支
  3. git checkout -b newIssue
    • 方面的工作,解决它
  4. git add .
  5. git commit -m "some msg"

在这一点上我会推,代码审查和合并。因为'起源/主人'已经超越了我,我必须做一次重组。我如何保持我的分支newIssuemaster保持同步,这样我就可以合并?我如何git pullorigin/masternewIssue

回答

1

关于你的第一个问题,git status只着眼于自己的仓库,没有任何远程存储库。

一般来说,看一个远程仓库,你必须在任何新的它第一次复制到自己的仓库。这样做的命令是git fetch(或者您可以使用git remote update来做同样的事情)。

还有git remote show origin,它咨询了遥控器,并比较了你当地的“他们的分支在哪里”和他们告诉你的想法。这可能是你以为你用git status得到的结果。但它并不是非常有用,因为你会得到两个答案中的一个:

  • 您目前处于最新状态。没有别的事可做。使用git fetch也无济于事,你就会完成。
  • 您不是最新的。您必须获得最新信息才能重新绑定或合并。要做到这一点,你必须运行git fetch,这会带给你最新的信息,然后你就可以继续。

比较这对只运行git fetch,这要么什么也不做(你现在正在做)或更新你(你现在就可以变基或合并)。

1

你让你的方式newIssue分支上的最新相对于上游主是通过衍合它的主人,因为你已经做的。您可以:

git checkout master 
git pull 
git checkout newIssue 
git rebase master 
...continue working... 

或者,你可以:

git remote update 
git rebase origin/master 
...continue working... 

都将让你在同一个地方(而在第二种情况下,当地master分行仍然会落后origin/master,直到你做一个git pull在那个分支上)。

有可能显然是冲突,底垫的一部分,如果有人正在修改你的工作在同一个文件,但定期重订有助于减少这些变化的大小。

+0

很酷,感谢您的提示! –

1

git status比较你的本地分支与git在最后一次读取/提取时间时知道的远程分支。像大多数git命令一样,它不会去到服务器或任何其他地方,所以如果有人最近推送了一些更改,它不知道它们。如果要使git status保持最新,请先执行git fetch