在分歧的GIT分支上

时间:2012-01-23 17:29:13

标签: git

我对以下一系列事件有几个问题。

有2位开发人员正在研究这段代码。首先,是什么原因导致分支机构首先出现分歧?

11:05:08 ~/myApp $ git status
# On branch Dev
# Your branch and 'origin/Dev' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
11:10:39 ~/myApp $ git push origin Dev:Dev
To ssh://git@mygitserver/myApp-web.git
 ! [rejected]        Dev -> Dev (non-fast-forward)

error: failed to push some refs to 'ssh://git@mygitserver/myApp-web.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

正如Git建议的那样,我尝试从remote/Dev到本地Dev,但只看到:

11:10:51 ~/myApp $ git pull origin Dev:Dev
From ssh://mygitserver/myApp-web
 ! [rejected]        Dev        -> Dev  (non-fast-forward)
然而,Git pull工作了。 为什么git pull工作并且git pull origin Dev:Dev失败了?

11:13:05 ~/myApp $ git pull
Merge made by recursive.
 WebContent/BL/a.jsp               |   14 +++++-------
 WebContent/RJ/b.jsp               |    3 +-
 .../RJ/c.jsp                      |   22 ++++++++++----------
 WebContent/RJ/d.jsp               |   14 ++++++------
 WebContent/TM/e.jsp               |   12 ++++------
 5 files changed, 31 insertions(+), 34 deletions(-)

后续git statusgit push origin Dev:Dev在没有冒险的情况下工作。

2 个答案:

答案 0 :(得分:1)

分支发散,当远程AND和本地存储库上发生更改时,将其视为隐式分支:使用相同的父提交进行两次(或更多次)提交。有人将新提交推送到存储库,而您已在本地提交而没有同步(合并或重新绑定)

至于git pull origin Dev:Dev无效:

git pull s manpage将其用法描述为:

git pull [options] [<repository> [<refspec>...]]

refspec部分告诉git哪个(远程)引用它应该合并到本地引用。因此,它只允许快进更新,以防止您丢失历史记录。

您可能想要更新远程跟踪分支,而不是本地分支:

git pull origin dev:refs/remotes/origin/dev

虽然存在针对您的用例的快捷符号:

git pull origin dev:
不带参数的

git pull将更新已配置的远程(通常为origin)的所有跟踪分支,并将第一个refspec合并到当前分支中。

答案 1 :(得分:1)

要想象出分歧,你只需要比较两台机器上的git log Dev