git push :推送本地更改到远程仓库的三种模式
摘要:由于在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 div), 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使用——推送本地文件到远程仓库
捣鼓了一下午之后总结如下: 1.首先可以照着这个链接里面博主给出的详细方法进行操作和配置: http://www.open-open.com/lib/view/open1454507333214. ...
- git推送本地分支到远程仓库并在远程仓库创建新分支
$ git push <远程主机名> <本地分支名>:<远程分支名> git push master test:test #master 为设置的远程仓库别名,第一 ...
- git 推送本地项目到远程库
git 推送本地项目到远程库 1@DESKTOP-3H9092J MINGW64 /e/mozq/00store/01/SmartCard_MS $ git init Initialized empt ...
- Git推送到多个远程仓库
Git推送到多个远程仓库 Grey 原文地址 准备工作 在码云和Github上分别新建两个不包括任何文件的空仓库(若是两个已经有文件的仓库,请参见关联已经存在的项目) https://github.c ...
- git push -u origin master和git push <远程主机名> <本地分支名>:<远程分支名>作用
git push git push命令用于将本地分支的更新,推送到远程主机.它的格式与git pull命令相仿. $ git push <远程主机名> <本地分支名>:< ...
- git推送本地分支到远程分支
场景 有时候我们开发需要开一个分支,这样可以有效的并行开发. 开分支有两种方式: 一种是在远程开好分支,本地直接拉下来; 一种是本地开好分支,推送到远程. 远程先开好分支然后拉到本地 git chec ...
- git 分支管理 推送本地分支到远程分支等
1.创建本地分支 local_branch git branch local_branch 2.创建本地分支local_branch 并切换到local_branch分支 git checkout - ...
- git创建本地分支以及推送本地分之至远程分支
Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...
- Git - Git推送本地分支到远程分支报错(! [rejected] non-fast-forward)的解决办法
一般都是冲突造成的,解决方案执行如下命令(dev为分支名称): git fetch origin dev #获取远程 dev 分支的修改 git merge origin dev #合并 ...
随机推荐
- Android底部菜单的实现
前言:以前制作菜单使用TabHost,但是android 3.0以上就被废弃了,google已经不建议使这个类了.ActionBar也是菜单,不过在头部,算是导航了 ===本文就介绍怎么制作底部菜单= ...
- 使用JS实现图片展示瀑布流效果
不知大家有没有发现,一般的图片展示网站都会使用瀑布流效果,所谓的瀑布流 就是网站内的图片不会一下子全缓存出来,而是等你滚动到一定的距离的时候, 下面的图片才会继续缓存,并且图片也是随机出现的,只是宽度 ...
- 使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar
使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar
- VI操作命令
1. 按下esc键,非insert模式下 鼠标移入到 home x 删除光标处单个字符 dd 删除光标所在行 u 撤销最近一次操作 yy 复制当前行 yw 复制当前光标到单词末尾 y$ 复制所在位置到 ...
- JSON 与 JSONP
JSON (JavaScript Object Notation) is a lightweight data-interchange format. 即 JSON 是一种轻量级的数据交换格式. 1. ...
- ios中蓝牙自动连接出现硬件提示框的问题
出现如图所示情况,这时候有两种方法可以处理,一种是让硬件部修改硬件配对,另一种是程序里面测试该提示框的对应特征值,不要调用该特征值就不会出现 //2.扫描到Characteristics,特征回调 - ...
- nginx服务器配置
nginx主要配置 #定义Nginx运行的用户和用户组user www www; #每个worker进程绑定到指定CPU ,均衡各CPU 负载worker_cpu_affinity 000000000 ...
- 带你玩转JavaWeb开发之六-mysql基本语法详解及实例(3)
[语法] update 表名 set 列名=列值,列名=列值 -[条件]; [注意事项] * 修改的列的值需要与列的类型一致. * 修改的列的值的长度不能超过列的类型的最大长度. * 字符串类型和日期 ...
- UITextField-修改占位文字和光标的颜色,大小
一.设置占位文字的颜色 方法一:利用富文本 /** 手机号输入框 */ @property (weak, nonatomic) IBOutlet UITextField *phoneTextField ...
- 《linux内核设计与实现》实践之模块及深入
<linux内核设计与实现>实践之模块及深入 写在前面的话. 基础模块部分我已经做完了,设计到的知识点无非就是,编写模块代码,编写Makefile文件,加载模块和卸载模块部分.由于大家都 ...