【问题标题】:Understanding weird branch merge with git用 git 理解奇怪的分支合并
【发布时间】:2012-05-13 20:24:51
【问题描述】:

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

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

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

$ 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)

【问题讨论】:

  • 看起来像 $ git pull origin sidebar 而不是 $ git pull origin master,这本质上是“获取 master 并将其合并到当前分支中”。
  • 我已经检查过了。我的 bash 历史说 git pull origin sidebar,没有主人
  • 你知道,从技术上讲,如果有人用“master”强行替换远程仓库中的分支“sidebar”,然后再将其恢复回来,理论上,如果你碰巧拉动,你可以获得这个看起来的历史记录从那个“侧边栏”分支,而它被替换。但是“master”这个名字写在提交消息中,所以它真的是“master”,而不是别的东西。我并不是说合并 master 的人一定是你,但 Git 的提交哈希可以确定某些事情。 ;-)
  • 感谢您的帮助,我正试图了解为什么会发生这种情况。我编辑了我的帖子。也许可以帮助?
  • 不幸的是,这并没有给图片增加任何有趣的东西:1)你有非常标准的推/拉设置; 2) remote 在 master 上的提交比你多; 3)你在侧边栏上有一些远程没有的提交,但是没有人远程弄乱侧边栏所以你现在推侧边栏,这会导致快进。

标签: git merge branch git-branch


【解决方案1】:

gitlog 表明发生了以下情况:

  • 作者 miserX 做了一个提交(2012 年 4 月 28 日星期六 03:46:58 +0200)并在提交 eb89c0bbb5516b1ed795b9fc958(2012 年 4 月 28 日星期六 15:54:08 2012 + 0200)。这导致了分叉,因为您的提交和来自 misterX 的提交都是基于之前的提交
  • 您在提交后的 11 秒内执行了 git pull。 Git 非常聪明,此时注意到侧边栏分支的本地头部与远程侧边栏头部仅在一次提交中不同,并且由于没有发生合并冲突,因此默默地合并了提交。这是完全正常的行为,除了声称这发生在分支主机上的消息。您使用的 git 版本存在错误,或者您在某些时候不小心通过 git checkout master 切换到 master - 检查 git branch 的输出

在一个侧节点上,如果您不希望这种合并行为,您可以改用git pull --rebase,它会尝试将您的所有提交重新设置在自上次拉取以来其他人推送的提交之上。这样一来,历史看起来会更清晰,尽管提交日期可能会暗示有人经历过时间旅行......

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多