37

我还是 git 新手。我修改了一些源文件并提交。然后,我做到了git push。但是,我得到了这个错误。

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 pull这个拒绝似乎我以前没有push。所以,我做到了git pull。好的,有两个其他人修改过的文件。

然后,我能够 git push成功。

问题:在这种情况下,我看到另一个日志,如下所示,其中包含我的原始提交消息:

commit 59e04ce13b8afa...
Merge: 64240ba 76008a5
Author: Jone Doe <jone@doe.com>
Date:   Fri Mar 15 11:08:55 2013 -0700

    Merge branch 'master' of /foo/bar/

这是我最初的提交信息。

commit 64240bafb07705c...
Author: Jone Doe <jone@doe.com>
Date:   Fri Mar 15 11:06:18 2013 -0700

    Fixed bugs and updated!

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

4

2 回答 2

27

当您执行 agit-pull时,来自远程分支的修改被合并到您的本地分支中。自动生成的提交表明了这一点。

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

于 2013-03-15T18:26:08.527 回答
13

如果其他人可能会进行更改,那么最好先做一个git pull --rebase(即,在远程更改之后添加您的新更改;这可能会发现您必须解决git push的冲突)然后结果。小心,这会创建以前从未存在过的新提交(就像任何历史重写一样),但它提供了一个干净的线性历史(没有合并的纠结)

于 2013-03-16T01:53:21.410 回答