我无法理解这个案子。为什么git pull origin develop
没有执行fast-forward
。为什么我需要运行git pull
来更新文件。
这是一个服务器副本。永远不会发生本地变化。开发人员在develop
分支中更新他们的工作,然后在钩子的帮助下在服务器上执行pull
。
这是终端命令和输出。
[dev1st@ds3 rosplay]$ git branch -vv
* develop d555ff7 [origin/develop: ahead 2] add comment
[dev1st@ds3 rosplay]$ git pull origin develop
From http://115.112.117.254/php/rosplay
* branch develop -> FETCH_HEAD
Already up-to-date.
[dev1st@ds3 rosplay]$ git status
# On branch develop
# Your branch is ahead of 'origin/develop' by 2 commits.
#
nothing to commit (working directory clean)
[dev1st@ds3 rosplay]$ git pull
From http://115.112.117.254/php/rosplay
2d3bb3a..d555ff7 develop -> origin/develop
Already up-to-date.
[dev1st@ds3 rosplay]$ git status
# On branch develop
nothing to commit (working directory clean)
我已正确设置跟踪信息。但仅限于此项目,git pull origin develop
将不会执行fast-forward
。
请帮忙。
.git/config
内容)[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = http://username:password@...php/rosplay.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "develop"]
remote = origin
merge = refs/heads/develop
答案 0 :(得分:4)
你有一个旧版本的git(1.8.4之前版本)。
首先请记住,git pull
仅为git fetch
,后跟git merge
, 1 ,但git pull
会将其他参数传递给这两个步骤。
当您使用否其他参数运行git pull
时,git pull
会运行git fetch origin
。 2 如果添加{{1}但是,origin develop
运行git pull
。最后一个额外的参数是 refspec 。使用git fetch origin develop
时,缺少冒号git fetch
字符的refspec会告诉提取进程告诉另一端(服务器上的另一个git进程)将其所拥有的所有内容发送给该名称,但随后-in旧版本的git only-to 跳过更新该引用的:
版本。 (新收到的项目(如果有)存放在您origin/name
运行FETCH_HEAD
的输出中的特殊参考git fetch
中。)
这意味着此特定形式的提取,仅此特定形式,跳过更新您的git pull
。
一旦获取结束,两种形式的origin/develop
都像往常一样进行合并(或rebase);在这种情况下,两次都无所事事。
当您git pull
运行git pull
以使git fetch
未更新时,您的git会立即忘记origin/develop
可能已更新。你运行origin/develop
并且你认为自己是"提前两次提交"。
运行git status
以使git pull
更新git fetch
时 - 请注意origin/develop
出现在输出中,而不是{{ 1}} - 您的git现在会记住从origin/develop
获得的新FETCH_HEAD
。这一次,develop
会显示您和origin
同步。这是因为这次你允许你的git更新它对服务器引用的知识(任何提取的git status
分支)。
这种特殊的奇怪行为最终被丢弃(在git版本1.8.4中),如果你更新自己的git,origin
将更新其origin/*
的想法,这种陌生感将会停止。但它现在发生了,因为四参数git fetch origin develop
形式使用了非冒号refspec。
1 如果已配置,则后跟origin/develop
。对于这种情况并不重要。
2 在这种情况下,无论如何;附加参数可以命名除git fetch
以外的某些存储库。