使用Git时,本地仓库向远程仓库push失败问题解决

        刚开始学习并使用 Git 就遇到了问题。使用 Git 时,本地仓库向远程仓库 push 失败(远程仓库并未有内容更新)。在网上查找了一些方法,但是都不能很好地解决。最后还是请教前辈才得以解决,在此分享一下。

        我的具体情况,我把本地的 “testA” 工程进行 Git 管理,使用“git init"进行初始化,作为一个远程仓库。然后克隆 "testA" 仓库,建立一个新的仓库 "testB" 作为本地仓库。在 克隆 某一工程后,Git 默认使用 "origin" 标识原始仓库testA。我在 testB 工作目录中进行文件的修改,add,commit 之后,想把所做的修改 push 整合到 testA 仓库中。

        在 testB 目录下运行命令: git push origin master。然后查看 testA 仓库,发现 push 并没有生效(就是文件没有变化)。


        分析:造成这个错误的原因是,git不允许多个用户同时对远程仓库的主分支origin/master进行操作。

        以此克隆 Git 会默认建立本次仓库的 master 分支和远程仓库的 origin/master分支。本地仓库还未进行过 commit 修改时,其实本地仓库的 master 分支和远程仓库的 origin/master 分支都指向同一个commit对象。如下图:


        当本地仓库 commit 一次修改后,origin/master 分支变成了 master 的上游分支,如下图:


        此时,master的修改要想push到origin/master分支上,是不能实现的。因为当前有两个仓库,远端仓库的用户在origin/master 分支上操作,而本地仓库的用户在 master 分支上操作。当本地仓库的用户试图push修改的文件到远程仓库的 origin/master 分支上时,相当于有两个用户同时对 origin/master 分支进行操作,这是 git 不允许的。


        解决方法:在远程仓库 testA 目录下新建一个分支:git branch dev,(这个分支的名字任意)

        然后通过命令:git checkout dev    把工作暂时切换到dev分支下,

        这时在本地仓库 testB 目录下运行:git push origin master

        还有最后一步,在 testA 目录下运行:git checkout master   把工作切换回该分支,就可以查看push更新了。


        该方法亲测有用。


        注:

        1、要想实现push操作,有一步是必须的。在远程仓库testA的目录下,修改.git文件中的config文件,在最后加上两句,因为git默认会拒绝push操作。

        [receive]

        denyCurrentBranch = ignore

        2、本地仓库向远程仓库push前,要保证和远程仓库版本的同步。所以最好先pull一下,以确保除自身修改内容外的文件同步。

        2、实际操作中,一般将远程仓库的master作为主分支,不直接在其上进行修改,而是创建一个新的分支,在新的分支上修改测试完成之后,再把master和新的分支合并。这样的好处是:如果出现什么麻烦的错误,只要切换回master分支,文件就恢复到了创建新分支时的状态。

        3、这里要说一下的是,网上查到解决该问题的方法,可以在此用"git init --bare"进行远程仓库的初始化,这样该仓库就是一个裸仓库,实际上不存在working tree,就不会与本地仓库产生冲突。但是这样的后果就是该仓库不能进行各种git操作。所以该方法我没有尝试。各位大神亲测过的可以留言交流一下。

       

        个人的小见解,如有问题烦请指出。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值