自己对git的一点认知

对git的理解

       最近接触了一个新的项目,里面用了很多以前没用过的技术和知识。到今天为止已经有一个月,对里面的技术进行一个总结。在这篇文章里,就先对git进行一个总结。写的不好,还请大家给出见意!

1.什么是git呢?

git是一个分布式版本控制系统。它是用来做版本控制的。比如说开发人员每次写完代码提交之后,它就会有一个记录,什么时间,提交了什么代码。如果开发人员想回退到以前版本,就可以用git完成。而分布式,是相对集中式的svn来说的。svn是当开发人员提交时,要把代码提交到一个远程的服务器上。然后其它人员想更新代码,就直接从远程服务器上更新下来。但这样有一个弊端,假如说远程服务器出现什么问题不能链接了,那对开发人员就比较麻烦了。但用git的话,就可以解决这个问题,因为分布式的,就是说每个开发人员的电脑上都有一个系统,只要做到同步,就可以了。当然,一般公司用git的时候,是分布式加中央服务器一起用的。

2.git与svn的区别

(1)分布式与集中式的区别。

git是分布工的,svn是集上式的。这是他们的最大区别吧。

(2)分支

GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。分支在SVN中一点不特别,就是版本库中的另外的一个目录

(3)GIT把内容按元数据方式存储,而SVN是按文件:

所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

3.git的常用命令

git status

命令可以让我们时刻掌握仓库当前的状态

git diff

如:git diff readme.txt

顾名思义就是查看difference

git diff 比较的是工作区和暂存区的差别
git diff --cached 比较的是暂存区和版本库的差别
git diff HEAD 可以查看工作区和版本库的差别


git reset

回退

如:git reset --hard HEAD^ 回退到上一个版本

git reset --hard HEAD^^ 回退到上上一个版本

git reset --hard HEAD~100 回退到上一百个版本


git log

查看版本库的状态


回退到回退前的那个版本

git reset --hard 3628164

git reflog

用来记录你的每一次命令:

git rm用于删除一个文件

如:git rm test.txt


创建分支并切换

git checkout -b zhouxin


git branch

查看当前分支


增加到缓存区

git add readme.txt


提交

git commit -m "这是注解"


切换回master分支

git checkout master


合并zhouxin分支到master

git merge zhouxin


删除自己的分支

git branch -d zhouxin


在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:




如果当前正在zhouxin上进行的工作还没有提交,却有一个bug要去修改,这时该怎么办


Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash


这时就可以创建分支来修复bug

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

然后就可以修改bug了,改完之后,再删除bug分支。


git stash pop

回复到zhouxin分支上,继续自己的开发


git push origin zhouxin

把代码推送到远程zhouxin分支上。如果远程zhouxin不存在,在推送的时候,会自动创建

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!


------未完------待续------


猜你喜欢

转载自blog.csdn.net/Fire_kr/article/details/77452612