git checkout branch命令是否真的与远程比较?

时间:2019-06-13 16:11:23

标签: git github bitbucket

我的项目目前有两个分支masterfeature,而我正在feature分支上工作。

完成后,我已经对bitbucket执行了git push并在pull request仪表板上执行了bitbucket

现在一切都完成了,我回到终端,我仍然在feature分支,所以我要做的是git checkout master切换回master,我得到了消息

  

切换到分支“ master”

     

您的分支机构的最新信息是“来源/主”

我以为这意味着我的本地工作区实际上已更新并与远程源同步,但这是错误的,因为我运行了git pull并进入了下层

remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
From https://git.domain.com:1234/bitbucket/xx/xx
   256c6bc..0a3bb4f  master    -> origin/master
Updating 256c6bc..0a3bb4f
Fast-forward
 .eslintrc.js                  |  15 +-
 App/Containers/xx.js | 363 ++++++++++++++++++------------------
 App/Containers/xxa.js  | 594 +++++++++++++++++------------------------------------------
 3 files changed, 352 insertions(+), 620 deletions(-)

在这一点上,我有点认为没有魔术,master分支在魔术上不会与远程起源相同,因此我将需要git pull

  1. 想知道我的理解是正确的吗?
  2. 在较早的阶段,执行合并后我第一次切换回master时,消息Your branch is up to date with 'origin/master'有点误导吗?

3 个答案:

答案 0 :(得分:3)

简短答案

使用您的Git存储库中的数据,myrecordstablegit statusgit checkout之类的Git操作都是脱机执行的。

要想知道您的分支机构是否真的与远程服务器保持最新,要做的是从git commit开始。这将从远程服务器检索数据,并更新git fetch和原始站点上的其他分支。

然后,origin/master会告诉您分支的来源已过时。

我在git status上的2美分

我不是git pull的粉丝,因为您真的不提前知道它会做什么:简化一点,或多或少等同于{{1} }后跟git pull,但两者之间仅自动检查。

我更喜欢此工作流程:

  • git fetch
  • 通过查看git mergegit fetch和/或git fetch和/或git status的日志来分析结果
  • git loggit diff,甚至有时是git merge,具体取决于我的分析,可能有一个临时的dev分支或一个git rebase

我的工作流程比简单的git pull还要工作,但是我知道在进行任何更改之前会发生什么。

答案 1 :(得分:1)

关键部分是git中的任何分支实际上有3个“副本”:

  1. 本地计算机上的副本
  2. 远程复制在本地计算机上
  3. 远程计算机上的副本

git status告诉您“您的分支的'origin / master'是最新的”时,它将比较#1和#2。执行git fetch是#2更新为与#3匹配的方式。

简而言之,您是正确的,没有魔术。在您的计算机上,origin/master不会自动与实际遥控器保持最新。

答案 2 :(得分:0)

那时,Your branch is up to date with 'origin/master'如预期般显示。但是在直到下一次提取/拉取的期间内,远程存储库中的master可能会根据您或其他人的拉取请求进行更新,并且由于非快进合并的缘故,可能会创建新的提交。结果,您的本地master(和origin/master)将在远程存储库中的master之后进行几次提交。 git pull将获得新的提交以更新origin/mastermaster