git push :推送本地更改到远程仓库的三种模式
来源:互联网 发布:python高斯分布散点图 编辑:程序博客网 时间:2024/04/30 20:35
摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆盖原来的提交历史。
本文来源:git push 的三种模式
地址:http://blog.csdn.net/trochiluses/article/details/14517379
1.git push产生冲突的形成过程
现在,服务器端最新版本是x;用户甲和用户已分别clone代码,然后进行开发;用户甲完成版本A,并提交,此时服务器端版本历史变成:
X------A
用户已机器上的版本提交历史是X--------B
而git push的结果说明是这样的: Update remote refs along with associated objects
其中远程和本地的refs都保存在本地的.git目录之下,而且都只有一个refs:
远程refs:
hyk@hyk-linux:~/xfstests/.git (master)
$ cat refs/remotes/origin/master
56a3959a96f1b5e046b3760778fd34b4911d0516
本地refs:
hyk@hyk-linux:~/xfstests/.git (master)
$ cat refs/heads/master
2c13da0b38b794581790ed0122a674d6ad6113ba
回顾我们原来学习过的分支创建的存储模型,push的实质是进行commit对象在远程的创建和指针的更新问题。也就是说,如果用户乙在此时push,那么X后代会指向B,B的parent也指向X,然后此时我们的X后代已经指向了A,所以会失败
2.方案一:强制覆盖
在某些情况下,你需要对别人的提交(也可能是你自己的),进行强制覆盖。例如,下面这种情况:
There is another common situation where you may encounter non-fast-forward rejection when you try to push, and it is possible even when you are pushing into a repository nobody else pushes into. After you push commit A yourself (in the first picture in this section), replace it with "git commit --amend" to produce commit B, and you try to push it out, because forgot that you have pushed A out already.
此时,我们只需要执行命令;git push --force
3.方案二:形成merge形式的提交历史
这是最常见的一种情况,如果你不想丢失自己的工作,也不想丢失别人的工作(你需要同时保存从X到A和B和提交历史)在每次push之前,我们先从服务器上pull最新版本(这样,就更新了本地存储的 refs/remotes/origin/master ),处理冲突,然后进行push,就不会产生问题了。此时,形成的提交历史如下:
B---C
/ /
---X---A
4.方案三:形成线性的提交历史
很多情况下,为了保持提交历史的整洁,我们需要形成线性的提交历史。仍然以这个例子说明:我们可以提取X和B之间的diff,把这个diff应用给A,形成如下的提交历史:
------X-------A--------D(the diff of X and B)
此时,需要的命令是:git push --rebase
- git push :推送本地更改到远程仓库的三种模式
- Git使用手册:git push 推送提交本地仓库代码文件到远程仓库
- git本地建立仓库推送到远程
- 本地项目推送到git远程仓库
- 将git本地仓库推送到远程仓库
- 第一次创建本地git仓库以后push到远程库报错
- git把本地项目push到远程仓库
- git push将本地分支推送到远程
- 创建局域网内远程git仓库,并将本地仓库push推到远程仓库中
- 创建局域网内远程git仓库,并将本地仓库push推到远程仓库中
- Git如何把本地代码推送到远程仓库
- 使用git命令将本地项目推送到远程仓库
- git的常用操作(克隆到本地和推送到远程仓库)
- git 将自己本地的代码建立分支推送到远程仓库
- git 撤回已经push到远程仓库的修改
- Git push提交到远程仓库卡住的问题解决
- git本地仓库关联到远程仓库
- Xcode9如何push到远程git仓库
- WinForms程序使用委托(Invoke)的方式操作界面的控件
- 条件变量
- Google App Engine for java学习笔记
- 计算机著作推荐
- 《程序员》 -- 业务、销售与技术的关系
- git push :推送本地更改到远程仓库的三种模式
- cocoa论坛会员源码分享
- java 从零开始,学习笔记之基础入门<Static>(十二)
- Android开发必看知识,不看后悔
- Twitter的中国门徒:新浪微博何去何从
- 说说Linux下的夏令时问题
- 关于MongoDB在64位服务器上依然报 mmap failed with out of memory 错误的解决方法(附Mysql性能对比测试)
- JPA概要
- Java中Vector和ArrayList的区别