基于青训营的学习视频和一些资料,本文主要介绍了 Git 的一些基本概念和具体用法等。
Num9
Git概念
Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 的读音为 /gɪt/。 Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git具体用法
- 仓库:在 Git 的概念中,仓库,就是你存在
.git
目录的那个文件夹内的所有文件,包括隐藏的文件,Git 程序会再当前目录以及上级目录查找是否存在.git
文件,如果存在,则会将.git
目录存在的文件夹开始下的所有文件当成你需要管理的文件,所以,我们如果想将某个文件夹当做一个 Git 仓库,你可以在那个文件夹下通过终端 (Window 为 Cmd 或者 PoewrShell 或者 Bash) 来执行。
git init
-
版本:在 Git 中,计数基础是提交,即我们常说的 Commit,我们每做一点更改便可以产生一次提交,当提交累计起来,可以作为产品定型时,就在当前的 Commit 上打上一个标记,将这个标记我们称之为版本多少多少,那么就算完成了一个版本,标记本身被称之为 Tag,请注意,在 Git 中,版本仅仅只是某一个提交的标签,并没有其他意义,Git 本身也仅有打标签的功能,并没有版本功能,版本功能是根据 Tag 来扩展的,Git 本身并没有。
-
分支:这是 Git 中最重要的也是最常用的概念和功能之一,分支功能解决了正在开发的版本与上线版本稳定性冲突的问题在 Git 使用过程中,我们的默认分支一般是 Master,当然,这是可以修改的,我们在 Master 完成一次开发,生成了一个稳定版本,那么当我们需要添加新功能或者做修改时,只需要新建一个分支,然后在该分支上开发,完成后合并到主分支即可。
-
提交:提交在 Git 中同样是非常重要的概念,Git 对于版本的管理其实是对于提交的管理,在整个 Git 仓库中,代码存在的形式并不是一分一分的代码,而是一个一个的提交,Git 使用四十个字节长度的16进制字符串来标识每一个提交,这基本保证了每一个提交的标识是唯一的,然后通过组织一个按照时间排序的提交列表,就组成了我们所说的分支,请注意,分支在本质上只是一个索引,所以,我们可以任意回退,修正,即使因为某些原因丢失了,也可以重建另外,关于 Git 的储存方式:Git 是仅仅只储存有修改的部分,并不会储存整个文件,所以,请不要删除文件夹整个文件夹的内容,除非你确定你不再需要他,否则请勿删除。
-
同步:同步,也可以称之为拉取,在 Git 中是非常频繁的操作,和 SVN 不同,Git 的所有仓库之间是平等的,所以,为了保证代码一致性,尽可能的在每次操作前进行一次同步操作,具体的为在工作目录下执行如下命令:
git pull origin master
其中origin
代表的是你远程的仓库,可以通过命令git remote -v
查看,master
是分支名,如果你本地是其他分支,请换成其他分支的名字,另,因为远程仓库与你本地仓库可能存在冲突,故当存在冲突时,请参考进阶篇的如何处理冲突。
- 推送:和拉取一样,也是一个非常频繁的操作,当你代码有更新时,你需要更新到远程仓库,这个动作被称之为推送,执行的命令与拉取一样,只是将其中的
pull
这个单词改成push
,同样,如果远程仓库存在你本地仓库没有的更新,则在推送前你需要先进行一次同步,如果你确定你不需要远程的更新,则在推送时加上-f
选项,则可以强制推送。
推送代码示例:
git push origin master
强制推送代码示例:
git push origin master -f
-
冲突:在使用 Git 开发时,如果只是一个人使用,那么基本不会产生冲突,但是在多人合作开发的情况下,产生冲突是很正常的一件事情。
-
合并:合并这个命令通常情况下是用于两个分支的合并,一般用于本地分支,远程分支多用
Pull
命令,该命令的功能是将待合并分支与目标分支合并在一起,注意,这个命令只会合并当前版本之前的差异,两个分支的提交历史会根据提交时间重新组织索引,故只可能会产生一次冲突但是会生成一个提交,如果你不想生成这次提交,加上--base
参数即可。 -
暂存:这个既是一个概念也是一个命令,其含义就是字面上的,作用就是可以将你当前正在进行的工作暂时存起来,然后在此基础上干别的事情,等你别的事情干完后,再转回来继续,注意,暂存只是针对你最后一次改动而言,即针对当前所在的版本的所有改动都算具体执行命令为:
将当前改动暂存起来:
git stash
恢复最后一次暂存的改动:
git stash pop
查看有多少暂存:
git stash list
- 撤销:撤销命令使用是非常频繁的,因为某些原因,我们不再需要我们的改动或者新的改动有点问题,我们需要回退到某个版本,这时就需要用到撤销命令,或者说这个应该翻译成重置更加恰当。具体命令如下:
撤销当前的修改:
git reset --hard
请注意:以上命令会完全重置你的修改,如果你想保留某些文件,请使用
checkout +文件路径
命令来逐一撤销修改。
如果你想重置到某一版本,可以将--hard
改为具体的 Commit 的 id 如:
git reset 1d7f5d89346
请注意,这时你的修改仍然存在,只是你的最近一次提交的版本号变成了你要重置的版本,如果说你想完全丢弃修改,只需要加上--hard
参数就可以。
小结
Git 速度快,有对非线性开发模式的强力支持(允许成千上万个并行开发的分支),完全分布式并有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)。