我今天早上醒来,看了一下我的开发团队在BitBucket上的私人存储库的提交历史。我看到了这个:
匿名已提交 fcde879
MERGE
将https://bitbucket.org/abc/xyz的分支'develop'合并到develop
中
这是,有点不寻常。我的猜测是,这是从没有正确配置git的新机器推出的。不过,我不确定为什么这样做。在BitBucket上,它显示两个单独的哈希作为提交父项,但它没有其他提交的“查看原始提交”选项。
我检查了那个分支,拉了,并手动查看了日志。
sidious@DS-1:/path/to/repo$ git log -1 --format=raw
tree 2931d14f48e61eaf0bbe0660af5b5dd76c07f063
parent 6bb38dee681df7620ffa42b6790641a7873166f2
parent f59c82e19e3e79310a53e273bab78139c49ff063
author root <root@somemachine> 1437069530 +0000
committer root <root@somemachine> 1437069530 +0000
Merge branch 'develop' of https://bitbucket.org/abc/xyz into develop
据我所知,6bb父级在开发分支上,而f59父级似乎来自不同的分支。很难分辨出发生了什么。
我搜索但找不到答案,我需要回到研究中,因此我在这里提出我的问题:为什么git将一个分支合并到自身?或者说,为什么这个命名法被用作提交消息?
答案 0 :(得分:48)
这种情况并不罕见。
这里的关键是合并的分支是不同的:它是远程存储库的develop
分支被合并到开发人员的本地(工作){{1}分支。
在开发人员的本地存储库中有两个不同的分支:
develop
=他/她目前正在进行的分支。新的提交就在这里。develop
=这实际上是当前存储库保存的有关远程服务器上origin/develop
分支状态的快照。当您执行develop
或fetch
时,它会通过远程更改进行更新,并在成功pull
后通过本地更改进行更新。现在,当你做push
时,会发生两件事。这是因为git pull
本质上是其他两个git操作的别名:git pull
和fetch
:
merge
- 将所有新提交(如果有)从远程存储库提供给本地fetch
分支。origin/develop
- 接受新提交并将其应用于本地工作merge
。这可以通过以下两种方式之一发生:
develop branch
分支指针,以便它指向{{{}中的最新提交。 1}}。这称为快进合并。develop
分支中,那么就会进行定期合并,这意味着有新的提交。 commit,包含来自两个分支的更改。默认情况下,git会将类似这样的消息分配给此类提交:origin/develop
。所以,这个场景很常见。
现在,如果这种情况经常发生,并且您不希望看到包含我们正在讨论的提交的非常复杂的提交历史记录图表,请尝试查看using rebase
instead of merge。
您可以通过两种方式执行此操作(从远程服务器获取更改时):
origin/develop
Merge branch 'develop' of https://bitbucket.org/abc/xyz into develop
答案 1 :(得分:8)
所有者有一些他们没有推动的开发提交,然后运行git pull
并从远程仓库中开发的新提交中获取/合并。
答案 2 :(得分:0)
我收到了同样类型的消息。
Merge branch 'feature/customfeature' of https://mylocalrepo.com/project.git into develop
它还没有破坏任何东西大声笑......所以不要惊慌失措。它只是将远程开发分支合并到您的本地开发分支中。只要不出现冲突,你应该好去:)
答案 3 :(得分:0)
如果你想在拉动之前避免这种类型的合并藏匿,像这样:
git stash
git pull
git stash pop