Git使用

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

1.安装Git

如今的Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行。可以通过官网https://git-scm.com/downloads直接进行下载。本篇以Mac系统为例:

2.Git 配置

在安装完之后,因为Git的分布式特点,每台机器都需要自报家门,即配置个人信息。注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。

  • 配置个人信息
    $ git config --global user.name "xxx"
    $ git config --global user.email xx@xxx.com

也可以去查看本机的配置信息

  • 查看配置信息 $ git config --list

Git有一些常见的用法

在这里插入图片描述
在这里插入图片描述
那么就逐一进行理解吧👇

3.创建版本库

(1)如何创建一个版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

  • 首先:生成一个目录(空或存在的都可以)
$ mkdir learngit(生成一个目录)
$ cd learngit    (切换到当前目录)
$ pwd           (显示当前目录)
  • 使用 git init 把这个目录变成Git可以管理的仓库。
    也可以指定目录作为 Git 仓库 git init xxx

具体步骤如下图所示:
在这里插入图片描述

(2)把文件添加到版本库

  • learngit目录(或子目录)下,编写readme.txt文件。
  • 使用 vi 加 文件路径(或文件名)的模式打开文件,如果文件存在则打开现有文件,如果文件不存在则新建文件,并在终端最下面一行显示打开的是一个新文件。
    在这里插入图片描述
  • 在插入编辑模式下编辑文件
    按下ESC键,退出编辑模式,切换到命令模式。
    在命令模式下键入ZZ或者:wq保存修改并且退出 vi ; 键入:q! 回车后放弃修改并退出vi
    在这里插入图片描述

第一步: 用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

第二步: 用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"

代码实现:
在这里插入图片描述

为什么用两步?
因为可以同时commit多个文件,所以分别add一个或多个文件之后,一起commit。

4.历史操作

(1)修改文件

修改(2)中的文件如下图:(增加 “big”)
在这里插入图片描述

  1. 首先去查看修改之后的状态:
    在这里插入图片描述
    上面的命令输出告诉我们,readme.txt 被修改过了,但还没有准备提交的修改。

  2. 为了去看具体修改的内容,可以使用 git diff 看看:
    在这里插入图片描述
    可以看到加了一个big单词。

  3. 现在就可以按照提交新文件的方式提交修改,按两步走:
    第一步git add
    在这里插入图片描述
    来看看git status:

    在这里插入图片描述
    它提到将要被提交的修改包括readme.txt,现在就可以去提交文件了!
    第二步git commit
    在这里插入图片描述
    再来看看git status:
    在这里插入图片描述
    此时,Git告诉我们当前没有需要提交的修改,而且,工作目录是干净的。

因为修改的文件已提交过,属于已跟踪文件。再次提交可以使用 git commit -am ""直接提交;而未跟踪状态(未提交过)的文件必须通过两步走操作。

(2)版本回退

经过多次对文件(例如readme.txt)的修改操作之后:

  • 1.想去看一下提交过几个版本,使用git log:
    在这里插入图片描述
    如果想去看每一次提交版本的id,可以使用 git log --pretty=oneline
    在这里插入图片描述
    这一大串的id编号是使用十六进制显示的,当然为什么会这么长呢?因为git的分布式特点,你和你的小伙伴们一起用一个版本号操作,当然不能用简单的1,2,3,4,5…呈现啦~

  • 2.回退
    这时我们想退回到上一个或之前任意一个版本,该如何去做呢?
    Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

    • 比如说回退到上一版本(add big),使用 git reset
      在这里插入图片描述
      验证成功,是上一版本的内容:
      在这里插入图片描述

    • 此时查看日志,发现最新的版本(add ha and enter)不见了:
      在这里插入图片描述
      回不去了怎么办😨 ?不要慌,在没有关闭命令行窗口时,使用git reset --hard 版本id,编号输前几位就好,只要能找到:
      在这里插入图片描述
      这不就回来了😄。原来,Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向它,你想指向哪个版本就可以指向哪个版本。

    • 那如果你已经关闭了窗口,突然想找到最新的版本,怎么办呢?
      只要找到你想回到的版本号commit id就可以了!使用git reflog
      在这里插入图片描述
      找到commit id,就可以按照前面回退的方式去自由操作了。

(3)工作区和暂存区

  • 工作区(Working Directory):
    就是在电脑中可以看到的目录,比如 learngit 文件夹就是一个工作区。
    在这里插入图片描述
  • 暂存区
    首先在此之前了解一下版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

在这里插入图片描述
因为把文件添加到版本库,是分两步执行的:

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git
commit就是往master分支上提交更改。所以我们把需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

举例:

  1. 修改readme.txt文件,同时创建一个新文件haha.txt:
    在这里插入图片描述

    2.使用git add将要提交的所有修改放到暂存区(Stage):

    在这里插入图片描述

    3.使用git commit一次性把暂存区的所有修改提交到分支:
    在这里插入图片描述

(4)管理修改

Git之所以比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。

每做一次修改,都需要经历 git add 到暂存区,再git commit的过程。缺一不可。

(5)撤销修改

  • 当改错了工作区某个文件的内容,想直接丢弃工作区的修改时:
    git checkout -- file
    (- -之后有空格, git checkout是用版本库里的版本替换工作区的版本)。

    在这里插入图片描述
    在这里插入图片描述

  • 当改错了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步:
    git reset HEAD <file>
    git checkout -- file
    在这里插入图片描述

  • 提交不合适的修改到版本库时,想要撤销本次提交,可以将版本回退一节(前提是没有推送到远程库)
    git reset --hard HEAD^

(6)删除文件

  • 当想删除一个文件,可以可视化操作或使用命令rm删除:
  • 此时,在下述命令行中显示到:工作区和版本库就不一致了,使用git status就可以看到你删除了什么内容。
    在这里插入图片描述
  • 情况一:
    正常情况下,此时需要从版本库中删除该文件,那就用命令git rm删掉,并且git commit就可以了:
    在这里插入图片描述
    情况二:
    当误删了文件,只要曾经提交过,版本库中就会有记录,使用撤销修改git checkout -- file就可以了。

5.Git 远程仓库

目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。你就需要将数据放到一台其他开发人员能够连接的服务器上。

(1)生成SSH

用来供Git仓库托管服务的网站有很多,常见的有github、gitlab等,以github为例:
由于本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的。

  • 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。
  • 如果没有:
  1. 使用命令$ ssh-keygen -t rsa -C "youremail@example.com",成功后在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。

  2. 登陆github,打开settings

  3. 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

点“Add Key”,你就应该看到已经添加的Key:
在这里插入图片描述

(2)创建远程库

  • 创建新仓库

    在这里插入图片描述
    在这里插入图片描述

  • 根据Github提示,把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
    把一个已有的本地仓库与之关联:
    git remote add origin git@github.com:Archer147/learngit.git
    第一次把本地仓库的内容推送到GitHub仓库:
    git push -u 原始主机
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。

    在这里插入图片描述

(3)从远程库克隆

前面(2)是先有本地库,需要创建远程库,并进行关联。
现在,我们假设不存在本地库,先创建远程库,再把远程库克隆到本地。

  • 通过git clone命令去克隆
    在这里插入图片描述

  • 其中命令行中克隆的地址是如下图方式获取:
    在这里插入图片描述

  • 克隆成功之后可以通过以下方式查看目录内容:
    在这里插入图片描述

  • 同时,还可以发现克隆时,使用的地址有多种方式:
    在这里插入图片描述在这里插入图片描述

但使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,所以ssh协议速度最快。

6.分支管理

(1)创建与合并分支

  1. 创建并切换到dev分支git checkout -b <name>或者git switch -c <name>
    或者分开:
    创建分支:git branch <name>
    切换分支:git checkout <name>或者git switch <name>

    方法一:
    在这里插入图片描述
    方法二:
    在这里插入图片描述在这里插入图片描述
    方法三:
    $ git switch -c dev

  2. 查看分支git branch
    在这里插入图片描述

  3. 可以在分支dev上做一些操作,比如修改readme.txt
    在这里插入图片描述

  4. 此时切换到主分支master,并查看目录中的readme.txt,发现之前内容没有更新。此时,需要合并分支git merge <name>
    方法一:
    在这里插入图片描述
    方法二:
    在这里插入图片描述
    查看文件:
    在这里插入图片描述

  5. dev分支新提交的内容合并到master分支上 ,可以通过git merge命令。此时readme.txt文件的内容已经是最新的。
    在这里插入图片描述

  6. 此时想要删除dev分支时可使用git branch -d <name>命令,删除后此时只剩下master分支:
    在这里插入图片描述
    在这里插入图片描述

(2)解决当两个需要合并的分支却同时对一个文件进行提交修改的冲突

  1. 先创建并切换min分支
    在这里插入图片描述

    同时修改,并提交readme.txt文件
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  2. 切换到主分支master,同时去修改并提交readme.txt文件(和1步骤相同)

    下图是修改后的文件内容:
    在这里插入图片描述

  3. min分支合并到master,发现报错(出现冲突)
    在这里插入图片描述
    并且查看状态是有两次提交
    在这里插入图片描述

  4. 此时需要进行手动修改冲突,将文件内容修改到一致状态:

    在这里插入图片描述

    在这里插入图片描述
    修改之后提交内容,此时查看历史,使用git log --graph --pretty=oneline --abbrev-commit命令可以看到分支的合并情况
    在这里插入图片描述

  5. 如果不再使用,可删除min分支

(3)遇见bug之后的分支

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

  • 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

(4)多人协作

  • 查看远程库信息,使用git remote -v
    在这里插入图片描述

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • git push origin <branch-name>推送自己的修改, 如果推送失败,则因为远程分支比你的本地更新,因此一般先用git pull拉下来代码,进行合并,再push上去。

  • 如果合并有冲突,则解决冲突,并在本地提交,解决后再push;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

7.标签管理

(1)创建标签

  1. 首先,切换到需要打标签的分支上,使用git tag XX命令创建新标签,它默认指向最新提交的commit上;使用git tag可以查看当前存在的tag
    在这里插入图片描述
  2. 我们也可以通过查看log,去设置具体的commit id的tag
    在这里插入图片描述
  3. 可以使用git show <tagname>查看标签信息
    在这里插入图片描述
  4. 可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
    在这里插入图片描述

(2)操作标签

  1. 命令git tag -d <tagname>可以删除一个本地标签;
    在这里插入图片描述

  2. 命令git push origin <tagname>可以推送一个本地标签;
    在这里插入图片描述

  3. 命令git push origin --tags可以推送全部未推送过的本地标签;
    在这里插入图片描述

  4. 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。使用时先在本地删除tag,再使用该命令就可以将远程标签删除成功。
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值