最基本的功能就是:记录代码的每一次改动,或者说,保存代码的改动历史。
@想一想@:这有什么用呢?
git就是一个目前非常流行的、开源的、分布式的版本控制工具。
PS:git最早用于Linux的开发,本身是命令行操作的,但微软将其嵌入到VS之中,大部分功能都可以由图形界面方便的完成(一些高级功能还是需要命令行)。
除git以外,还有SVN、TFS等源代码版本控制工具。
关键点:
svn的仓库没有:本地 vs 远程之分,工作区内容直接提交到(远程)仓库。所以:
全球最大同性交友网站欢迎你!
PS:作为最大的开源社区已经被微软收购。微软说:这是他们拥抱开源的重要一步,^_^!开源世界说:我们的基地被攻陷了……o(╥﹏╥)o
区分 github 和 git :
但github这个网站的核心功能就是:提供一个公共的、易用的git repository服务器。
使用github,同学们需要(演示:略)
一旦建立本地仓库,git默认就会追踪(track)仓库所在文件夹下所有文件的改动(change)。
改动又细分成三种:
我们可以通过对比(compare)查看这些改动内容。
git在commit前,还设置了一个步骤:staged。
理论上,change最开始是unstaged,所以首先要被staged,又被称之为加入index,可以理解为放置在“缓存区”,最后才能commit。
stage可以将改动“部分/分批次”提交。但是,这样操作首先有风险,然后又没什么用的:建议同学们总是把所有改动一次性staged and commit。
change在commit之前还可以撤销(undo或discard)
有些文件(比如bin文件夹下),我们不想将其加入repository,就可以在repository文件夹下面,添加一个.gitignore文件,里面记录被需要被ignore的文件/文件夹。
.gitignore可以由IDE自动生成,也可以从第三方获得,开发人员还可以手动更改。
但是,.gitignore不能把已经track并存放在repository中的文件移出,需要我们手动的将其删除后再commit。
必须在填写commit message之后,才能将改动提交到本地repository。
注意:
此外,飞哥再三强调:
一旦提交,就会被记录到历史(History)中。
@想一想@:文件被删除,然后被提交,repository如何处理?
记录了每一次提交的
在所有的历史记录中,git用一个HEAD指针,指向当前版本。
所以撤销(discard)未提交更改,实际上就是:Replace with HEAD Revision(用HEAD版本替换工作区内容)
HEAD非常有用,通过调整HEAD的指向位置(配合其他组件/机制),git可以完成令人耳晕目眩的各种花式操作。
历史记录不仅可以被查看,还可以被“回退”。
Reset:首先移动HEAD指针到指定版本,然后,根据相应区域(work/index/repository)是否变动,分为:
为了以防万一,git还“偷偷的”把所有(只要HEAD发生变化, 就会被记录)的本地更改都放在RefLog里面。
所以即使被hard reset的记录在reflog里也可以查找到。
PS:Visual Studio暂未支持
这是一种非常安全的方式。它实际上是新建的一次提交:参照你想回退到的那个版本(历史记录),对当前内容进行更改,然后提交。
如果你对git的操作不太熟练,我建议你总是使用这种方式进行回退。
注意,之前所有操作,都是在本地(你自己的电脑上)进行的。要想和别人分享你的代码,你需要有一个远程仓库(一般放在github/gitee上):
飞哥把:
的过程称之为publish。
其本质还是一个push的过程。
有些IDE(比如Visual Studio)会将publish过程合二为一,一次性执行。
把github上面的仓库,复制/拷贝/弄到本地的过程,就是clone。
注意这个单词:clone。
要想在两个仓库之间同步,仓库和仓库之间必须“基因”相同。
一定要理解:两个仓库(DNA)一样 ≠ 两个仓库里面的内容一样。
怎么才能相同呢?以下情形任选其一:
同步会首先比较远程repository和本地repository的差异。然后,
如果远程repository上有比本地repository上更“新”的更改,
@想一想@:这是怎么造成的?
本地就可以:
如果本地repository上有比远程repository上更“新”的更改,
本地就可以通过push,将本地的更改直接推送到远程repository
我们来看更复杂一点的情形:
拉取的过程中就可以产生冲突。比如同一个文件的同一行代码
这时候git没法自动处理(是两个都要呢?还是一个覆盖另外一个?两个都要,谁在前谁在后呢?),就报一个冲突(conflict),让开发人员自行解决(resolve)。
开发人员需要更改工作区内容,然后再commit+pull,确定最终版本。
使用你选用的git插件,完成:
多快好省!前端后端,线上线下,名师精讲
更多了解 加: