Git管理版本的入门记录

前言

Git是一个版本管理工具,很早就听说过。只是之前自己写代码没有反复迭代版本的需求,又嫌麻烦,一直到工作需要才开始学。这里记下自己目前对该软件的一些理解。目前只有本地内容,远程库的相关操作以后补充。

基本原理

Git存储位置分为三个区域,即工作区(Working Directory)、缓存区(Staging Area)和版本库(Repository)。

工作区其实就是一个文件夹,该文件夹下的任何任何更改都会被Git检测到。要让一个文件夹变成工作区,只需在该目录下,执行git init即可。执行后该目录下会生成一个隐藏文件夹.git。.git文件夹被称为版本库,版本库内就包含了缓存区。

可想而知,版本库内存放的是列代版本。但这些版本存档并非直接由原文件复制粘提到一个地方存起来,而是通过将库中的指定的版本与工作区的文件(注意:.git文件夹虽然位置包含于工作区,但其为版本库,而不属于工作区)进行比较,然后提交后这些差异会被存起来。什么是差异?我们在工作区新建了一个文件,此时差异就是新增了该文件。同理还有修改和删除文件。

当然,在工作区中的文件可能更改比较频繁,如果都提交,那么每次都会生成新的版本存档,肯定不是我们想要的 。这时缓存区(又称为索引)就发挥作用了,每次我们发觉当前工作区文件要更新了,比如说我想为软件新加一个功能,但不想因为这个小功能就新增一个版本,那么我们就将当前更改先存到缓存区,这样即使发现软件发生了问题,也可利用缓存区的版本进行恢复。

所以通常的生成版本存档的操作流程是:工作区内文件发生变化->缓存区存储差异->将缓存区内容提交生成版本存档存入版本库

梳理一下三者之间的关系:从文件系统的角度,缓存区所在文件夹位于版本库文件夹.git内,版本库位于工作区所在文件夹内。从逻辑关系的角度,三者是相对独立的三个存储区域。要备份一个新版本,可以将工作区内的文件存入缓存区,再将缓存区内容存入版本库。也可跳过中间环节,虽然一般不推荐。要还原当前工作区的文件,可以直接从版本库还原也可以从缓存区还原。

此外,需要知道的是,版本库中版本分为不同的分支(branch),最主要的一般命名为master分支,在开发时,我们会建一条dev分支。版本库有一个版本指针(HEAD),我们让其指向dev分支。我们每次提交时差异到版本库时,存放的是HEAD指向的这条分支上,故不会直接提交到master中。一个分支中,可以有多个历史版本,每当我们提交一次差异,就会增加一个,指针会自动指向新增的版本上。所以如果我们要还原某个历史版本,只需将指针指向某个分支的所需版本,然后再进行还原即可。

 

常用操作

将当前文件夹初始化为工作区:git init(同时会生成一个版本库文件夹)

将文件clone到工作区:git clone [目标位置] (可理解为复制粘贴。但该命令可从远程仓库下载文件,比如github,功能较强)

查看工作区的状态:git status(可以查看是哪些文件产生了差异,同时提供一些简要提示)

暂存差异到缓存区:git add [目标文件](将目标文件的差异暂时存入缓存区)

从缓存区提交到版本库:git commit [目标文件]提交时,Git会强制要求对该版本附上一段说明

从工作区直接提交到版本库:git commit -a(所有差异都会被直接提交)

从缓存区恢复到工作区:git checkout [目标文件]

从缓存区和工作区去除文件:git rm [目标文件]

从HEAD指向版本存档恢复到工作区:git checkout HEAD

显示工作区和缓存区的差异细节:git diff(数据量可能比较大,推荐结合grep使用)

显示缓存区和版本库的差异细节:git diff --cached

示工作区和版本库的差异细节:git diff HEAD

显示所有分支及当前HEAD指向的分支:git branch(没有参数时等效于添加--list参数)

新建分支:git branch [字符串](HEAD会自动指向新建分支)

重命名分支:git branch -m [待更名分支] [字符串]

将某个分支合并到当前分支:git merge [目标分支]()

将本地分支的更新推送到远程主机:git push()

从远程库拉取最新内容:git fetch/pull(差异是:fetch不会直接合并到本机分支,pull则会)

Note:目标文件如果较多,可以用*号操作,单个*表示所有文件,*.cpp表示所有末尾为.cpp的文件,若有一个文件夹a,则a*或a/*表示a文件下所有文件,如果a/b*表示表示a文件夹下所有首字符为b的文件或文件夹(及其下所有各层的文件和文件夹)。如果需要实现更复杂的筛选,推荐使用linux终端的grep命令和管线传递。

基本操作

说了这么多,到底怎么操作?

比如有个空文件夹ProjDir,在该文件夹上右击,选择用终端打开。

输入git init,将其设置为工作区,接着添加自己已有的的工程,或者从github克隆某个工程。

输入git status,可以看到提示当前位于分支master(一般会自动建立,如果某些情况下没有,自己建立一个即可)。然后可以看到提示一系列未跟踪的文件。这个时候先别急着提交,而是先看看哪些文件是不需要提交的。先在工作目录ProjDir下新建一个文本文件.gitignore(注意"."号),填入需要忽略跟踪的文件或文件夹,以换行符隔开(可以通过通配符批量列举)。

输入git add .(注意"."号),再次git status可以看到红色变成绿色,说明文件已经缓存

输入git commit .(注意"."号),此时跳转到编辑器,输入提交说明,保存退出。通过git status可以看到干净的工作区提示。

输入git log可以查看提交历史及其hash码。Done!

一个基本的提交过程大致就是这样。当然,在实际使用过程中,肯定有更多需求,这里仅做引入,希望能让跟我一样自学的朋友几分钟就能快速入门!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值