Git基本用法

Git基本用法

配置用户信息

git config --global user.name Jack 设置用户名;

git config --global user.email xx@xxx.com 设置邮箱;

上述配置信息都存放在~/.gitconfig里面,上面的设置也可以直接通过修改这个文件来实现。

创建本地仓库

先创建一个普通的本地目录,进入该目录,使用git init命令来初始化仓库。

由下图可以看到原本新建的目录下面多出一个名为.git的隐藏目录,这个目录就是用来管理版本信息的。

image-20220531155631278

进行第一次提交

在目录下新建一个文件README.md,这里说明一下这个文件是干嘛的。这个文件通常是用来介绍这个仓库/项目的内容的;同时由于新建的git仓库是没有分支的,所以开发人员在刚建立仓库之后就新建一个README.md文件并进行提交,以此来达到初始化主分支的目的。下面我们来进行一下这个操作。

  1. 新建README.md

    image-20220531160342111

    上面使用了一个git status命令来检测当前git仓库的状态,可以看到git已经检测到我们在这个仓库进行的更改(新建了一个文件)了。

  2. 将对仓库所做的更改添加到暂存区

    这里要介绍几个git的基本概念:

    • 工作区:仓库的目录。
    • 暂存区:数据暂时存放的区域,相当于工作区写入版本库之前的一个缓存区。
    • 版本库:用于存放所有已经提交到本地仓库的代码版本。

    这里我们使用git add README.md命令,将刚刚新建的文件添加到暂存区中。

    image-20220531161245931

    由上图可以看到新文件已经添加到暂存区中了。

  3. 提交到版本库

    接下来我们将暂存区中的更改保存到版本库中。需要注意的是,每次提交更改之前都需要对本次的更改写注释,这就要用到git commit -m "XXX"命令。

    image-20220531161649219

    进行完commit之后,上文所做的更改就顺利的被保存到本地仓库中了。

到这里我们就在本地添加了一个分支和一个版本

我们用上面的图例进行表示,则现在仓库的状态为

即上述的操作为本地仓库添加了一个master分支(主分支默认的名字,这个也可以自己改),并在这个分支上添加了一个版本。

使用版本库来保存更改

现在我们要开始真正地领略git的魅力了哈哈哈。

现在我们先尝试对README.md进行修改,并将修改提交到版本库中。

  1. 修改README.md

    现在我使用vim README.md中写入了一行111。

  2. 将更改提交到暂存区

    image-20220531163531048

    再次使用git status命令,我们可以看到git又检测到了我们对本地仓库进行的修改。

    像上面一样我们使用git add README.md命令,将我们刚刚对README.md进行的修改提交到暂存区。

    image-20220531163758212

  3. 提交到版本库

    同样和第一次一样,使用git commit -m "XX"命令,对我们刚刚作出的更改添加注释,然后提交这个版本到本地版本库中。

    image-20220531163945062

经过上面的操作,恭喜你,你的本地版本库又多了一个新成员。

image-20220531164109271

当然,git不仅仅能跟踪文件内容的变化,也能跟踪仓库中文件的增删。下面我们就来实际操作一下。

  1. 在仓库中新增文件

    image-20220531164600292

    我在仓库中新建了两个文件分别名为a.txtb.txt,并使用git status命令查看了一下当前仓库的状态。

  2. 将对仓库的更改提交到暂存区

    image-20220531164805608

    照旧,使用git add命令,根据上图你可以发现git add命令可以给出多个参数。

    实际上,上图中的git add a.txt b.txt 可以用 git add . 命令来替代,后者是将当前本地仓库中所有的更改提交到暂存区。

  3. 将更改提交到版本库

    image-20220531164931437

    照旧,使用git commit命令。

现在版本库的结构变成了这样

接下来我们再练习一下上面的操作,尝试将文件a.txtb.txt 从本地仓库中删除,并将这个更改提交到本地版本库中。

  1. 删除 a.txtb.txt

    image-20220531165602416

    经常用git status命令可以使你清楚你正在干什么哦。

  2. 提交更改到暂存区

    image-20220531165759274

    这里你可能好奇了,明明a.txtb.txt 都不存在了,为什么指定的参数里还是他俩。

    哈哈哈,这里的 git add 命令的参数实际上指定的是你本次操作的对象,不管是增还是删还是改,参数就写你操作的对象就行了。

  3. 将更改提交到本地版本库

    image-20220531170038977

现在我们的本地版本库变成这个样子了

image-20220531170255646

查看你的版本库

不知道你是否好奇,如果没有上面那个图片的辅助,你是否能搞清楚自己的版本库里面到底有几个版本,分别都是啥。

这里就要介绍另外两个命令了 git loggit reflog

下面这张图解释了上面图中的信息。

image-20220531171025206

上面这两张图就是git log的执行结果。

下面这张图就是git reflog的执行结果。

image-20220531171205644

这两个结果记录的信息实际有些许差异,马上我们就会介绍到。

回滚操作

所谓回滚,就是将当前仓库的状态更改到本地版本库中的某个版本。

这里我们要引入一个新的概念:HEAD指针,HEAD指向当前操作的仓库版本。上面的版本库的图就需要改成这个样子了

image-20220531171844604

那么我们改怎么进行回滚操作呢。聪明的你一定想到了,只需要更改HEAD指针的位置就可以了。这里使用 git reset 命令。

假如我们现在要回滚到移除 a.txtb.txt 之前的一个版本。我们先查一下对应的那个版本的版本号是什么,这个版本号就是 git log 中每条commit记录的哈希值的前7位,这个数字也和 git reflog 中每条记录的第一个字段完全相同。我们先找到这个版本号,你们的可能和我的不一样哦

image-20220531172516644

然后我们使用 git reset --hard 版本号 这个命令来完成回滚操作

image-20220531172639684

神奇的事情发生了,死去的 a.txtb.txt 又回来了。

我们现在就来到了这个地方

image-20220531172816175

我们再尝试一下去到仓库刚建立的时候,先找到版本号

image-20220531172955940

再使用git reset --hard XXXXXXX 命令

image-20220531173113056

可以看到我们又完成回滚了。

image-20220531173220013

最后我们来填一下上面留下的一个坑:git loggit reflog 记录信息内容的区别是什么

我们现在执行一下git log

image-20220531173403368

哇,我们现在只剩下一个版本啦! 实际上git log只会记录从根版本到HEAD指针指向的所有版本的信息。

我们再执行一下git reflog

image-20220531173553302

可以看到,HEAD指针每次经过的位置都会被展示出来。

这就是这两个命令本质上的区别啦。

撤销本地文件更改以及撤销缓冲区提交

假设你对本地文件进行了一些修改,但是因为某种原因需要舍弃这个修改。这时我们可以使用 git restore XXX 命令将某个文件回退到缓冲区的版本。

下面来测试一下

先对README.md文件进行修改

image-20220531201042132

尝试回退

image-20220531201119421

可以看 README.md 成功回退到了之前的版本。

假如我们对执行的更改已经提交到缓冲区了,那么上面的方法就无法回退了,这时我们需要先把缓冲区里面文件的版本回退到修改之前,然后将本地的文件回退到和缓冲区相等。下面再测试一下。

image-20220531201455856

上图可以看到当更改提交到缓冲区,刚刚介绍的方法就不管用了。

这时我们先执行缓冲区回退操作

image-20220531201612242

再对文件进行回退

image-20220531201645542

可以看到回退成功执行了。

分支操作

如果你在某个节点想尝试一些新东西,而又不想动主分支里面的内容,这时我们可以创建一个新的分支,在这个新分支进行的任何操作都不会影响到主分支。

创建分支

下面我们来尝试一下,使用git checkout 命令来创建新的分支

image-20220531202554916

这样就创建并切切换到了新的,名为dev的分支

image-20220531202906242

现在我们的结构就变成这样啦。

我们可以通过git branch 命令来查看所有分支和当前分支,当前分支前面会有一个*将其标记出来。

image-20220531203354651

我们还可以用git checkout XXX命令来切换分支,就像下面这样

image-20220531203058967
创建的分支会继承当前版本所有的历史版本。

使用完的分支可以使用下面这个命令删除

git branch -d XXXX

分支的合并

假设我们在某个分支上做的东西很不错,我们想要把它添加到主分支里面,这时我们就需要git merge XXX 命令来合并分支了。

刚刚发现我的分支没学明白,等我看明白了再更😭。

再更啦

假设我们现在的仓库内容是这样的

image-20220601003034163

我们创建并切换到一个新的分支

image-20220601003120054

修改并提交了对 README.md 文件的修改

image-20220601003214817

切换回master分支

image-20220601003336756

尝试合并dev分支

image-20220601003415208

可以看到dev做出的修改已经成功合并到master分支里啦。上面是没有冲突的情况。

如果在某个版本我们创建了一个分支,但在这个分支创建之后master分支上的文件叶做出了变动,这样的话在合并时,相当于有两个分支同时对一个文件作出了修改,这样就会产生冲突,下面我们来复现一下这个过程

image-20220601004009489

上图我们创建了一个分支并对README.md文件做出了修改。

image-20220601004127126

上图我们在master分支又向前推进了一个版本。

下面我们尝试合并master和dev分支

image-20220601004227280

可以看到发生了冲突,这个时候我们就要去解决冲突。那么就有同学要问了,该怎么解决冲突呢?方法也是简单粗暴,直接修改发生冲突的文件,我们先打开README.md文件看一下

image-20220601004350624

可以看到git非常贴心地把冲突的地方标出来了,这时我们只需要按照自己的想法修改一下这个文件即可,我就把它修改成了下面这样

image-20220601004510459

image-20220601004553974

分支正确合并了!

云端操作

云端的代码托管平台非常多,国际最大的github,国内的gitee,还有各种机构搭建的gitlab。这里我选择拿github做演示。

进入世界上最大的同性交友平台,注册账号,这些基本操作我就不多说了

点击这里我们新建一个云端仓库

image-20220601005029323

这里配置你的仓库的基本信息,注意由于git仓库是我们在本地初始化的,因此我们不需要勾选ADD a README file来初始化仓库

image-20220601005127072

这里我把它这样配置,仓库的名称要和本地的一样

image-20220601005423200

对,我就是只填了一个仓库名hhhh

点下面那个图标来创建仓库

image-20220601005512022

现在我们就进入到了下面这个界面

image-20220601005704958

要把本地的仓库提交到云端,先添加远程仓库

git remote add origin https://github.com/XXXX/XXX.git

image-20220601010900840

再将远程的分支和本地分支关联起来

git push --set-upstream origin master

image-20220601010953393

我们提交时使用git push -u 命令,-u只在第一次需要使用。这个命令是将当前分支提交到云端。

image-20220601011029817

同样的,我们也可以将dev分支推送到云端

image-20220601011424691

可以进行的操作还有很多,和本地的都大同小异,像git这样的工具还是熟能生巧。

在云端创建的分支也可以和本地的分支对应起来

git branch --set-upstream-to=origin/branch_name1 branch_name2

可以将远程仓库的当前分支和本地仓库的当前分支合并

git pull

可以将远程仓库的指定分支和本地仓库的当前分支合并

git pull origin branch_name

可以将远程的分支拉取到本地

git checkout -t origin/branch_name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值