Git的本地使用(Git二)

Git的本地使用

    上一节总结了Git在不同系统下的安装和配置,现在来学习一下Git在本地的具体操作吧,和GitHub远程使用的我们后面再总结学习,首先了解几个名词,也就是基本概念。

1,基本概念

    版本库:repository,又叫仓库,可以简单的理解为一个目录,其实就是我们初始化一个仓之后生成的那个”.git”目录,然后这个目录里边放的是所有文件的操作的历史数据,包括创建、修改文件和修改时间等所有的操作历史,这个目录里边的所有文件都可以被Git管理起来,当然对文件的操作历史记录都可以进行跟踪。
    工作区:我们能在电脑里边看到的目录。
    暂存区:我们用add命令提交的修改都是先存放在暂存区的,commit之后才会真正的提交到分支上,默认分支名字是master。
这里写图片描述
    注意:所有的版本控制系统,只能跟踪文本文件的改动,比如TXT文件,程序代码或网页等,Git可以告诉我们每次的改动是什么,但是对于图片、视频等这些二进制文件,虽然可以进行版本管理,但是没有办法对文件的改动进行追踪,只能知道这个二进制文件的大小是否有变化,但是具体变化的是什么内容就无法知道了。

2,添加和提交

    首先我们先创建一个目录,然后我们在这个目录中进行操作。
这里写图片描述
    通过git init命令我们把GitTest目录变成了Git可以管理的仓库,我们可以看到该目录下多了一个.git目录,这个目录是Git用来跟踪管理版本的,不要随意更改里边的文件。
    我们先在GitTest目录下创建一个文件test.txt。
这里写图片描述
    创建文件后,我们用git status命令去查看该版本的状态是否有变化,git add前提示我们有文件可以add,git add后提示我们该文件可以被提交,接下来我们提交一下,然后再看一下状态。
这里写图片描述
    ”working directory clean”,工作区是干净的,也就是没有其他修改的需要提交的了,并且告诉我们现在是在master分支上。
    现在我们已经知道了怎么去初始化一个版本库,并且对文件进行提交。

主要涉及的命令:
    git init,git add,git status,git commit -m ‘提交说明’(说明:-m主要是提交说明,就是当前提交做了什么,方便查看)

3,版本回退

    接下来我们来看下来修改这个文件会发生什么。
这里写图片描述

这里写图片描述
    这个时候告诉我们”test.txt”这个文件有修改,具体修改了什么,我们可用git diff命令来查看。
这里写图片描述
    git diff之后我们就很清楚了看到之前具体做了什么操作了,然后看图中又执行了git diff --cached,什么也没有显示,紧接着执行了git add test.txt,又执行git diff的时候也是什么都没有,但是执行git diff –cached的时候有提示我们具体的修改了,这就引出了git diff和git diff --cached的不同之处:git diff是对工作区里的修改进行对比的,也就是这时候对比的文件还没有添加到暂存区,把文件添加到暂存区的时候我们用git diff –cached才看见效果,说明git diff --cached是对已经添加到暂存区里边的修改进行对比的。
    总结:git diff(显示所有未添加到暂存区的变更)
git diff --cached(显示所有已添加到暂存区但还没有提交的变更)

    我们可以用git log命令来查看我们的操作历史,如下图:
这里写图片描述
    git log命令会告诉我们修改了几次,还有就是提交说明,这让我们一目了然之前都做过什么操作,图中”commit”后边可以看做是此次修改之后的版本号。当我们提交之后发现有问题,想回退怎么办,git reset --hard HEAD^就是回退到上一个版本的命令,也可以看到”HEAD is now at 0bd7eb9”,HEAD其实就是指向当前分支的一个指针,就像回退,我们只是把这个指针指向了上一个版本号而已。回退之后的版本中,我们的test.txt文件就是空的了,也就是第一次创建时候的状态。
    如果要回退到上上一个版本,只需要把”HEAD^”改成”HEAD^^”即可,如果是要回退一百个版本怎么办呢,改成”HEAD~100”就可以了,当然我们很少遇到这种情况,了解一下。
    如果我们做了很多版本的修改之后,使用git log会显示很多很多内容,怎么简化一下呢,使用git log --pretty=oneline命令,就会只显示版本号和提交说明了。因为我们已经回退了一个版本,所以只显示了一个版本。
这里写图片描述

    当我们发现不该回退版本,又要取消回退的时候怎么办呢,我们可以借助版本号来取消回退,实际上就是把HEAD指针重新指向我们需要的版本号上。首先我们要获取版本号,git refog可以查看到所有的版本号,然后我们用git reset --hard 版本号,就可以回退到我们需要的版本了。用cat test.txt命令查看一下内容,发现就是我们第二次修改添加的内容了。
这里写图片描述

4,撤销修改

    以上介绍的是我们提交之后对版本进行的回退操作,如果我们是对还没有提交或者压根就没有添加到暂存区的修改进行撤销该怎么操作呢?下面我们就来演示一下,我们先在test.txt文件中再次添加一行内容。这时候我们没有进行add操作,也就是还在工作区中,我们可以使用命令git checkout -- test.txt进行撤销,查看内容发现就是修改之前的了。
这里写图片描述

    如果我们已经添加到了暂存区该怎么撤销呢?
这里写图片描述
    如上图,我们已经把修改添加到了暂存区,这时候想要撤销,可以使用git reset HEAD test.txt命令,然后我们用git status查看状态,发现”modified”变成红色的了,也就是add之前的状态了。
这里写图片描述

主要涉及的命令:
    git diff(显示所有未添加到暂存区的变更)
    git diff --cached(显示所有已添加到暂存区但还没有提交的变更)
    git log (显示所有的操作历史)
    git log --pretty=oneline (只显示版本号和提交说明)
    git refog(查看到所有的版本号)
    git reset --hard 版本号 (回退到某一个已经提交的版本)
    git checkout -- test.txt (撤销工作区的修改)
    git reset HEAD test.txt (撤销暂存区到修改,回到工作区状态)
    git config --global color.ui true (git status等命令显示不同颜色)
    cat test.txt (显示文本内容)

5,问题总结

Windows下
5.1,git命令行中有中文的时候控制台如果报以下错误:
这里写图片描述
解决办法:编码格式出了问题,如上图,直接依次运行以下命令即可。

git config  core.quotepath off
git config  --unset i18n.logoutputencoding
git config  --unset i18n.commitencoding

5.2,Please tell me who you are.
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值