从场景学习Git(2)

Day 2

1.更新代码

在忙活了一整天之后,终于将远程仓库的代码获取到了自己的电脑上了,现在就该开始开发了,那么在开始一天的开发工作之前,我们需要先使用下面的命令来和远程仓库保持同步,避免再克隆仓库之后,远程仓库的代码又发生了更新。
git pull --rebase
下面这条命令可以非常快速地帮助我们从远程仓库获取最新的代码。注意到这里添加了一个--rebase的参数,这个参数的加入可以帮助你省去很多的麻烦,这里就先不做过多解释了。

2.分支开发

很快,你的项目组长给了你一个新的开发任务,需要你开发一个新的小功能,这个时候,你需要首先将分支切换到dev分支。这里先解释一下什么叫分支,在一个Git仓库中,一般会同时存在多个分支,例如master,dev,release等,这些分支分别由不同的用处,例如master分支就是记录重大版本的分支,dev分支就是开发过程中记录版本的分支,而release分支就是记录发布的正式版本的分支,那么我们通过这多条分支记录不同的版本,就能帮助我们将一个不断开发前进的项目管理得井井有条,不会将来在需要回滚的时候变得十分混乱。

dev分支是一个专门用于开发的分支,在这条分支上有最新的开发代码,我们通过下面的命令切换到dev分支
git checkout dev
其中dev也可以换成其他的分支名,就对应切换到不同的分支当中。

接下来,我们需要再创建一个功能分支feature,用于单个小功能的开发,为什么不直接在dev分支上进行呢?因为在开发的过程中,我们也可能会产生多个版本,这个时候如果全部记录到dev分支显然并不现实,更何况这个dev分支会同时存在每个开发同事的电脑上,我们也没有必要将自己开发过程中的所有版本都放到人家的电脑上,这会造成许多冲突和浪费。

创建分支可以通过下面这条命令:
git branch [branch_name]
创建出这个分支之后,我们还要手动切换到这个分支,这就和上面的命令一样了,试试你还能想起来怎么切换分支吗?

在切换完分支之后,我们就处于feature分支了,现在我们可以进行开发了。

开发中…

3.提交

在开发完成之后,我们想要记录下当前的这个版本,这时需要使用提交功能,但在提交之前,我们首先要将想要提交的文件添加到缓存区中。缓存区可以理解为一个还没有提交的版本,我们通过将文件添加到缓存区,如果之前缓存区中不存在该文件,那么这个文件会被添加进来,如果该缓存区中存在该文件,那么这个新的文件会覆盖缓存区中旧版本的文件。

将文件添加到缓存区可以通过下面这条命令:
git add [filename|.]
其中如果我们用.作为参数,那么会自动将所有发生修改和新添加的文件加入到缓存区当中。

添加到缓存区后,我们可以先用下面的命令来看看当前文件夹中是否还有刚刚修改过却忘记添加到缓存区的文件。
git status
如果执行完下面的命令之后没有跳出什么信息,则说明所有文件和修改都已经添加到缓存区了。下面我们将当前缓存区中的版本作为一个正式的版本进行提交。
git commit
通过下面这条命令即可进行提交,但要注意的是,接下来会跳转到一个界面需要你编辑这次提交的信息,相当于备注一下这次提交修改了什么地方,方便后续如果有必要的话要进行代码回滚,方便查找。

终于我们完成了一个新的版本,但这个时候,你的项目组长突然告诉你,需求变了(╯‵□′)╯︵┻━┻。好吧,那只能重新进行开发了,你又开始了新一轮的开发。

开发中…

4.代码回滚

总算是顺利开发好了。这时你的上司突然走过来拍了拍你的肩膀,告诉你,经过讨论决定,还是想保留原来的版本,新的需求暂时不需要了,你的心中瞬时一万头草泥马奔腾而过。不过好在你之前的版本做了一次提交,所以你现在可以很轻易地回滚到之前的一个版本。

关于代码回滚其实有三种主要的方式,针对当前情况,最好的方式是采用git reset,该命令会直接将整个分支的状态重置到之前的某个节点,然后抛弃该节点以后的提交,具体使用方法如下:
git reset [commit number|HEAD~n]
第一种参数选择是填入提交对应的版本号,这个版本号可以通过git log查看,是一串经过Hash函数处理得到的字符串;第二种方式是通过指定当前所在版本,用相对查找的方式来回退,这里的n就是指回退到当前版本之前第n个版本,而在这里,显然n=1。

除此之外,代码回滚还有下面两种方式。

首先是一个我们比较熟悉的命令,git checkout,参数的选择和git reset一样,这个命令的特点是专门用于查看之前的某一个版本,我们一般在回退的时候不采用。主要是查看之前某个版本的文件是什么样的,查看完之后再用别的命令进行回退。

其次是另外一个命令git revert,这个命令是为了弥补git reset的不足。我们知道,git reset会将回退版本之后的所有版本直接删除特别是在多人开发的时候,这个命令可能导致别人的版本也因此被删除掉了,这个显然很容易引发惨案,所以引入了这样一个命令。其原理呢是将之前的一个版本复制一份,然后让你进行修改,修改完成之后作为一个新的提交放在最后面,这样就不会导致一些提交的版本被删除了。当然弊端呢则是空间的消耗会变大。

好啦,终于是把之前的版本找回来了。你第一次感慨Git竟然这么强大,帮你省了这么多事。接下来我们需要把我们开发出来的东西推送到远程仓库上,让别的同时能够获取到。

5.代码推送

首先,我们需要将开发成功的这个功能合并到我们的dev分支上,一个新的功能最终只需要以一个完成版作为一次在dev分支上的提交即可。我们首先要先拉取最新的dev分支,和最开始更新的命令一样
git pull --rebase

完成dev分支的更新之后,我们就可以把我们开发的feature分支的代码合并到dev分支里来,也就是把我们新开发的功能加入到旧的代码当中。通过下面的命令实现
git merge [branch_name]
然而一般这个时候我们都还需要处理一下冲突。所谓冲突,就是两个分支之间,同一个文件的同一个位置的代码出现了不同,这个时候需要进行冲突处理。

通过git status可以查看冲突发生的文件,然后我们打开这些文件,冲突的地方一般会是下面这样的格式:

<<<<<<<<<<<HEAD
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
=============
yyyyyyyyyyyyyyy
yyyyyyyyyyyyyyy
>>>>>>>>>>>name

我们可以看到冲突的地方存放了两个版本的代码,其中HEAD部分的代码就是当前所处的分支的代码,这里就是dev分支所在的代码,而name部分则是合并进来的分支的代码,这里就是feature分支的代码,我们需要将两部分代码删去一部分,或是都保留下来,总之最后要符合我们的需求,并且将分隔符删去,最终得到的就像下面这样。

xxxxxxxxxx
yyyyyyyyyy

在处理完冲突之后,一般还需要运行测试一下,确定没有问题了,我们就将代码添加到缓存区,然后提交一次,作为合并的节点。

合并完成之后,将dev分支推送到远程仓库一天的工作就算完成了。
git push
这里因为之前我们是直接克隆下来的远程仓库,所以就自动将本地的dev分支和远程仓库的dev分支绑定在一起了,git就能知道要将dev分支推送到dev分支,至此,一天的开发工作就算彻底完成啦,下班。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值