理解奇怪的分支与git合并

时间:2012-05-04 09:36:30

标签: git merge branch git-branch

我正在开发一个名为sidebar的远程分支,就像这样创建(来自我的电脑,而不是远程仓库):

$ git branch sidebar
$ git checkout sidebar
$ git push -u origin sidebar
$ git pull origin sidebar

在侧边栏分支上进行一些提交之后,我将其推送到了repo:

$ git push origin sidebar

现在看来侧栏被合并为主人,我不明白为什么:

$ git log --graph

* commit 3830b6e72f4249cd15c7a35e47a2
| Author: me
| Date:   Mon Apr 30 16:56:28 2012 +0200
| 
|     re-build sidebar boxes
|    
*   commit e97e63b05a522e29d3ca97a509e3652d
|\  Merge: eb1ebfd ed10585
| | Author: me
| | Date:   Sat Apr 28 15:54:19 2012 +0200
| | 
| |     Merge branch 'master' of 
| |   
| * commit 6495e5bd7ac12364a4a12389f58
| | Author: misterX
| | Date:   Sat Apr 28 03:46:58 2012 +0200
| | 
| |     FB: add friend list with statistics
| |   
* | commit eb89c0bbb5516b1ed795b9fc958
|/  Author: me
|   Date:   Sat Apr 28 15:54:08 2012 +0200
|   
|       add product img lens icon

你知道发生了什么事,我错在哪里吗?

编辑:也许以下内容可以提供帮助

$ git remote show origin
Password: 
* remote origin
  Fetch URL: user@repo
  Push  URL: user@repo
  HEAD branch: master
  Remote branches:
    master  tracked
    sidebar tracked
  Local branches configured for 'git pull':
    master  merges with remote master
    sidebar merges with remote sidebar
  Local refs configured for 'git push':
    master  pushes to master  (local out of date)
    sidebar pushes to sidebar (fast-forwardable)

1 个答案:

答案 0 :(得分:0)

gitlog表明发生了以下情况:

  • 作者misterX做了一个提交(在2012年4月28日星期六03:46:58 +0200)并在提交之后

    0200)。这导致了一个fork,因为你的提交和misterX中的提交都是基于

  • 之前的提交
  • 您在提交后的11秒内完成了git pull。 Git非常聪明,此时注意到侧边栏分支的本地负责人在一次提交中因远程侧边栏头而不同,由于没有发生合并冲突,因此默默地合并了提交。这是完全正常的行为,除了声明在分支主机上发生这种情况的消息。您使用的git版本有错误,或者您偶尔通过git checkout master切换到主版 - 检查git branch的输出

在侧节点上,如果您不想要这种合并行为,则可以使用git pull --rebase代替,这将尝试在您上次提取后推送其他人推送的所有提交。历史看起来会更清晰,尽管提交日期可能会建议某人有时间旅行......