我对以下一系列事件有几个问题。
有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 status
和git push origin Dev:Dev
在没有冒险的情况下工作。
答案 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
。