fast forward 讲解:利用gitub进行托管 之 git push错误 fail to push some refs——no fast forward

来源:互联网 发布:xp打开端口 编辑:程序博客网 时间:2024/06/05 14:26

概述:为了在不同地方,不同人员之间进行协同编辑,同时能够进行统一管理,我们可以把代码托管到github的服务器上。

1.第一步:新建一个github账户


2.第二步:在账户中新建一个仓库


3.第三步:在本地新建一个仓库

git init

git add .

git commit -m


4.第四步:在本地新建远程仓库与分支

git remote add origin git@github.com:testthinguser/iphone_project.git

vim .git/config

  1 [core]  2         repositoryformatversion = 0  3         filemode = true  4         bare = false  5         logallrefupdates = true  6 [remote "origin"]  7         url = https://github.com/huangyukun2012/linux-2.4.21.git  8         fetch = +refs/heads/*:refs/remotes/origin/*  9 [branch "master"] 10         remote=origin 11         merge = refs/heads/master

注意,remote "origin"表示远程分支的信息,branch master 表示本地分支的信息,其中remote参数表示要提交到的远程分支,merge 是默认的merge对象


5.第五步:利用git进行推送

git push origin master

此时,容易出现以下no fast forward错误:



出错原因:

多人协同开发,使用Git经常会看到警告信息包含术语:fast forward, 这是何义?

简单来说就是提交到远程中心仓库的代码必须是按照时间顺序的。

比如A从中心仓库拿到代码后,对文件f进行了修改。然后push到中心仓库。

B在A之前就拿到了中心仓库的代码,在A push成功之后也对f文件进行了修改。这个时候B也运行push命令推送代码。

会收到一个类似上面的信息:

提醒你非快进方式的更新被拒绝了,需要先从中心仓库pull到最新版本,merge后再push.

特别注意:

1)fast forward能够保证不会强制覆盖别人的代码,确保了多人协同开发。简而言之,fast forward提交就是说,后提交点B是前面最新提交点的直接后代。这样,直接将HEAD指针往下游移动即可。

2)尽量不要使用non fast forward方法提交代码。no fastforward状态如下图所示:

-------1.1-------1.2-------1.3

           |

        1.4-------1.5

上图产生的过程:从图中,我么可以看出:最开始我们从服务器上pull下来1.1版本,后来别人向服务器上提交了1.2和1.3版本,然后我们在本地分支开发了1.4与1.5版本。此时,如果我们再进行提交,那么1.2和1.3的版本历史将被覆盖。


解决方法:

先执行git pull

然后执行 git add  .

然后git commit

最后git push origin master