令人窒息的GIT操作,冲突,合并,分支,版本?

前言:最初接触GIT是因为GITHUB,当时想在GITHUB上传一些自己的代码,然后开始慢慢了解到GIT,后开进入公司做项目开始再一次开始接触到GIT,然后一路头疼到现在,如果再不好好了解一下,会影响到自己的工作,所以找时间来整理一下思路。

一、为什么会有GIT?

如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:

想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:

lots-of-docs
图1

过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。

看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。

更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。

于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?

这个软件用起来就应该像这个样子,能记录每次文件的改动:

版本文件名用户说明日期
1service.doc张三删除了软件服务条款57/12 10:38
2service.doc张三增加了License人数限制7/12 18:09
3service.doc李四财务部门调整了合同金额7/13 9:51
4service.doc张三延长了免费升级周期7/14 15:17

这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

二、必需了解的git知识点

1、Workspace    工作区:增改删的⽂文件或内容
2、Index / Stage 暂存区:执行命令:git add fileName,⽂文件放在暂存区。取消执行: git reset fileName
3、Repository    本地仓库:执行命令:git commit ‘commit info’,放在本地仓库
4、Remote          远程仓库:执行命令:git push branchName,提交到远程仓库

工作区、暂存区、本地仓库、远程仓库流转
图2 工作区、暂存区、本地仓库、远程仓库流转

 

三、分支

1、主分支master

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长:

git-br-initial
图3 master分支

 2、创建新的DEV分支

git创建分支,当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

图4 新建一个dev分支

3、从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

git-br-dev-fd
图5 在dev上进行修改 此时master分支不变

 

四、合并

上面哪张图中所示的master分支没有变化,而dev分支产生了变化。 Git合并可以将dev分支上的数据合并到master上面

git-br-ff-merge
图6 将dev上的修改合并到master分支

五、冲突

1、merge时产生冲突

上文第四点谈到合并是非常简单的合并,master分支不变,dev分支改变,这样的合并是不会产生冲突的,但是如果master分支和dev分支修改了相同的文件,就会产生冲突,此时必须手动解决冲突,否则无法进行合并,下图是IDEA中产生冲突的图形界面,左边是你修改的部分,右边是另一个分支进行的修改,产生冲突时我们可以选择保留自己的,也可以选择保留别人的,当然也可以手动合并到中间的部分,保留自己想要的结果。

2、push时产生冲突

在本地commit完了之后,push到远程可能会出现冲突,这是因为远端仓库上有别人提交了代码,进行了更新。要解决这个问题,需要首先更新自己的本地代码。所以在自己改代码之前尽量先pull一下,更新远程代码。

3、pull时产生冲突

          这个问题跟上一个问题其实时一个问题。当本地代码和远程代码有冲突时,执行git pull操作的时候,会提示有冲突,然后直接终止本次pull。

解决思路: 可以先将本地内容暂存到仓库中,这时,就可以正常的将远程代码下载到本地了,然后再通过stash操作将仓库中的内容合并到本地。

 

六、撤回

git reset --版本号,撤销commit的内容,工作区内容不变

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值