git新增--转载

摘要:
应用程序示例描述假定已经在github或gitoschina上建立了一个项目。默认分支为主分支,远程主分支为c Sh文件内容:技术共享开发者A和B在某一天将项目复制到自己的本地进行开发,开发者B提交c Sh,提交成功。技术共享后,当本地代码与远程主分支不同步时,开发人员A修改本地c.sh。修改后的c.sh内容如下:技术共享修改后,开发人员A准备将代码提交给远程主分支。

(1)应用实例描述

假设在github或者gitoschina上建立了一个项目,默认分支为master分支,远程master分支上c.sh文件内容:

技术分享

开发者A、B分别将项目拷贝到自己本地进行开发

某一天,开发者B提交c.sh,并且提交成功,

技术分享

之后,开发者A在本地代码并没有和远程master分支的代码同步的情况下,对本地的c.sh进行了修改,修改后c.sh内容如下:

技术分享

修改后,开发者A准备将代码提交到远程master分支上。

(2)引入问题

假设开发者A提交过程如下:

$ git add c.sh

$ git commit -m "XXXX"

如果直接使用$ git push,则会报错:

error: failed to push some refs to ‘git@git.oschina.net:XXXX/gitlearning.git‘

hint: Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., ‘git pull ...‘) before pushing again. See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details.

上述过程的节点走向如下图所示:

技术分享

实际开发过程中考虑其它开发者可能会对c.sh进行修改,因此一般在开发过程中建议使用

$ git pull --rebase

与远程代码同步,同步过程会检查冲突,

技术分享

此时,开发者根据 <<<<<<< HEAD,=======,>>>>>>> 便可知冲突的位置。

注意:不是出现冲突才使用git pull --rebase,它是一种解决冲突的手段,另外还有merge的方式

(3) 知识点引入

$ git pull --rebase

git pull的默认行为是git fetch + git merge

git pull --rebase则是git fetch + git rebase.

$ git fetch

从远程获取最新版本到本地,不会自动合并分支

$ git rebase

git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。本地更新分支节点过程如下图所示。(关于rebase节点知识点可以参考http://blog.csdn.net/hudashi/article/details/7664631/)

技术分享

$ git pull --rebase

git pull --rebase执行过程中会将本地当前分支里的每个提交(commit)取消掉,然后把将本地当前分支更新为最新的"origin"分支,该过程本地分支节点更新图如下所示:

技术分享


(4)回到主题

git rebase --abort 会回到rebase操作之前的状态,之前的提交的不会丢弃;

git rebase --skip 则会将引起冲突的commits丢弃掉;

git rebase --continue 用于修复冲突,提示开发者,一步一步地有没有解决冲突,fix conflicts and then run "git rebase --continue"

1、使用 $git rebase --abort

按(2)“引入问题”步骤中执行后,执行:

$ git rebase --abort

$ git push

仍然出现Updates were rejected because the remote contains work that you do not have locally...错误,说明此次提交与rebase之前的提交一样,出现的除外也一样(逻辑不严谨,大致是这个意思),可以猜想git rebase --abort会当前的commit会回到rebase操作之前的状态 。

当然此时可以使用$git add ,重新提交新的文件,例如

$ git add c.sh

$ git commit -m "XXXX"

$ git push

在远程master分支上可以查看提交内容,展示如下:

技术分享

2、使用 $git rebase --skip

git rebase --skip 引起冲突的commits会被丢弃,对于本文应用的例子来说开发者A对c.sh文件的commit无效,开发者A自己修改的部分全部无效,因此,在使用skip时请慎重。

执行:$ vim c.sh

查看本地c.sh文件提交内容,展示如下图所示,执行语句之后开发者A的修改无效。

技术分享

3、使用 $git rebase --continue

可以运行git rebase –continue继续直到完成

You must edit all merge conflicts and then mark them as resolved using git add

无误之后就回退出。回到matser分支

免责声明:文章转载自《git新增--转载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇静态反调试技术Vue中的代理Proxy和$ref下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Hexo | (一)使用Hexo+Pages搭建个人博客

本篇主要介绍使用Hexo+Pages搭建个人博客的流程。使用 Hexo 博客框架搭建,解析markdown文章,生成静态页面,将页面托管到 github / coding 服务器上。github / coding 都有pages 服务,提供免费的静态网页托管和演示服务。 搭建步骤: 安装git,nodejs 安装hexo 本地搭建站点(线下访问) 部署到...

GitHub 的使用(用Git完成代码提交)

1、什么是GitHub   GitHub是一个开源的托管服务,有点像代码的云。它以各种不同的编程语言托管您的源代码项目,并跟踪每次迭代所做的各种更改。该服务可以通过使用git(一种在命令行界面中运行的修订控制系统)来完成此操作。和SVN一样,都是管理我们代码文档用的。 2、GitHub相比SVN的优势   (1)操作处理速度快     在Git中的绝大多数...

关于初学者上传文件到github的方法

 转:http://blog.csdn.net/steven6977/article/details/10567719 说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午。终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:)   废话不多说,直接来,这次主要介绍的是windows下的安装和使用。...

Windows平台使用Gitblit搭建Git服务器图文教程

Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭源的项目就会收取昂贵的费用,如果你不缺米,那么不在本文讨论的范围内,既然这样,我们可以自己搭建我们的Git服务器。 国内使用Windows Server平台的用户占大多数,那么本文就来讨论如何在Windows平台下搭建G...

Git 快速入门

首先来了解一下什么是[git] git是一款分布式管理代码以及一些简单的常规文本文件的的工具,并可将修改的代码上传至服务器备份,相较之前的'svn'集中式管理工具,git是一款非常方便且安全的工具. tip:[分布式]是指整个项目在分部开发时可以直接将项目分支给其他分部,待各个分部代码写完后再向主线合并即可,这样即便有一个分支出现问题也不会影响主线,非常...

记Git保存本地密码与删除本地缓存

参考: https://www.jianshu.com/p/77b0340a02f3 https://blog.csdn.net/yunlong782/article/details/50887833?locationNum=7&fps=1 保存密码 git有三种策略查找用户名密码:去缓存中找,去磁盘中找,去钥匙串中找。 ~/User/用户...