2013-03-15 70 views
18

我还是git新手。我修改了一些源文件并提交。然后,我做了git push。但是,我得到了这个错误。git:为什么“合并分支”“......”的主人?当拉和推

To /foo/bar/ ! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '/foo/bar/' To prevent you from 
losing history, non-fast-forward updates were rejected Merge the 
remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

这似乎拒绝我没git pullpush之前。所以,我做了git pull。好的,其他人有两个修改过的文件。

然后,我能够成功地git push

问题:在这种情况下,我看到多了一个日志像我原来的提交信息如下:

commit 59e04ce13b8afa... 
Merge: 64240ba 76008a5 
Author: Jone Doe <[email protected]> 
Date: Fri Mar 15 11:08:55 2013 -0700 

    Merge branch 'master' of /foo/bar/ 

这是我原来的提交信息。

commit 64240bafb07705c... 
Author: Jone Doe <[email protected]> 
Date: Fri Mar 15 11:06:18 2013 -0700 

    Fixed bugs and updated! 

我想了解为什么要添加“合并分支主位置”。

+0

[Git pull可能重复导致无关的“合并分支”消息在提交日志](http://stackoverflow.com/questions/8509396/git-pull-results-in-extraneous-merge-branch-messages-in-commit-log),其中有更多更详细的答案 – 2016-07-04 22:58:07

回答

14

当你做了一个git-pull,来自远程分支的修改被合并到你的本地分支。自动生成的提交表示。

合并可能导致冲突,然后需要手动解决。在你的特定情况下,这没有发生,git可以处理所有事情。

+0

是有没有办法避免这种额外的提交?例如,通过在当前提交中包含合并修改(*修正了上面的错误和更新!*)?因为它会污染日志历史。 – Kalvn 2017-03-30 08:25:10

+3

如果远程分支在本地分支之前,Git将尝试执行快进合并,即远程分支在本地分支的提交之上有一些提交。在这种情况下,没有额外的提交。只有当两个分支的历史分歧时才会出现额外的提交。在这种情况下,您可以使用'git rebase'或'git pull --rebase'重写本地分支的提交历史记录,执行快速合并。虽然重新编辑有其自身的缺点,但额外的合并提交并不总是不好 - 它们只是记录了开发过程。 – 2017-04-08 01:02:02

+0

感谢您的解释:) – Kalvn 2017-04-26 14:20:05

7

如果有可能是被别人改变,这可能是一个好主意,做一个git pull --rebase(即添加后远程更改您的新变化;这可能会发现冲突,那么你就必须解决),然后git push结果。请注意,这会创建以前从未存在的新提交(与任何历史重写一样),但它提供了一个干净的线性历史记录(没有合并纠结)