Git(小乌龟)

317 阅读7分钟

资料参考:《猴子都能懂的Git入门》

入门篇

一、Git基础

1. Git的数据库分为远程数据库和本地数据库的两种。

远程数据库配有专用的服务器,为了多人共享而建立的数据库。
本地数据库为了方便用户个人使用,在自己的机器上配置的数据库。

2.修改记录的提交

  • 不同类别的修改 (如:Bug修复和功能添加) 要尽量分开提交,以方便以后从历史记录里查找特定的修改内容。

  • 务必输入提交信息

    • 标准注解

    •   第1行:提交修改内容的摘要
        第2行:空行
        第3行以后:修改的理由
      

3.工作树和索引

​ 在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。

​ Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。

​ 所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。

4.初期设定

安装后,设定名字和邮箱

5.新建数据库

  • 创建目录文件,右键选择「Git 在这里创建版本库」
  • 成功后,内有隐藏文件.git

6.提交文件

  • 目录文件内做出增删改
  • 目录内,右击任意空白地方,然后从右击菜单选择‘Git提交’。
  • 点选‘变更列表’里的对应文件,然后在日志信息方框中输入提交信息,再点击‘确定’键。
  • 右击菜单选择TortoiseGit > 显示日志;查看操作记录已添加在历史记录里

二、共享数据库

  • Git执行推送(Push)操作,本地的修改记录会被上传到远程数据库
  • 进行克隆(Clone)操作就可以复制远程数据库。
    • 执行克隆后,远程数据库的全部内容都会被下载。另一台机器的本地数据库上进行操作。
    • 克隆后的本地数据库的变更履历也会被复制,所以可以像原始的数据库一样进行查看记录或其他操作。

1.在Gitee建立远程仓库

  • 建立repository,填写信息
  • 获取数据库的HTTP或者SSH

2. Push到远程数据库

  • 右击“tutorial”(对应仓库)目录,然后选择“推送”。
  • 点击‘管理’
  • 在"远端"输入"origin",在"URL"输入上一页中生成的远程数据库的URL,然后点击"添加/保存"。这样,"origin"将被添加到远程列表,然后点击"OK"。
    • 执行推送或者拉取的时候,如果省略了远程数据库的名称,则默认使用名为”origin“的远程数据库。因此一般都会把远程数据库命名为origin。
  • 输入Gitee用户名和密码
  • 成功后再Gitee仓库中查看最近更新消息
  • 日志 master origin/master** **origin/HEAD 已经提交到远程数据库成功

3.克隆远程数据库

  • 选择文件放置位置,然后从右击菜单中选择“Git克隆”。
    • 点击“Clone Repository" 按钮,再输入要克隆的远程数据库的URL(HTTP)和要保存的本地数据库的目录(注意设置本地数据库名),然后点击“确定”。
  • 等待成功

4.克隆数据库中Push

  • 克隆数据库,修改文件内容,先提交,再推送;

4.1关于提交的位置

  • origin/master 表示远程数据库“origin”的分支“master”的位置。
  • origin/HEAD 表示远程数据库“origin”当前提交的位置。 通常,克隆本地数据库时指向与“origin/master”相同的位置。
  • master 表示本地数据库分支“master”的位置。

5.从远程数据库pull

  • 右击tutorial目录,然后从右击菜单中选择’拉取‘,即可执行pull操作。

  • 从右击菜单选择 TortoiseGit > 日志。现在"master" 和 "origin/master"在同一水平上,意味着本地数据库已完成更新。

三、整合修改记录

1.合并修改记录

  • 执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,push将被拒绝。
  • 在读取别人push的变更并进行合并操作之前,push都将被拒绝。如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更会丢失。
  • 合并的时候,Git会自动合并已有的变更点!不过,也存在不能自动合并的情况。

2.解决冲突

​ 如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。

2.1 Git会在发生冲突的地方修改文件的内容

​ 如下图。所以我们需要手动修正冲突。

1-同一处发生冲突.png

==分割线上方是本地数据库的内容, 下方是远程数据库的编辑内容。

2.1如下图所示,修正所有冲突的地方之后,执行提交。

2.修改冲突.png

高级篇

一、分支 branch

1.什么是分支?

​ 分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以同时进行多个修改。

分叉的分支可以合并。

3.分支创建.png

​ 为了不受他人的影响,可以在主分支上建立自己专用的分支。完成工作后,将自己分支上的修改合并到主分支。因为每一次提交的历史记录都会被保存,所以当发生问题时,定位和修改造成问题的提交就容易多了。

4.分支合并.png

1.1 master分支

​ 数据库进行最初的提交后, Git会创建一个名为master的分支。因此之后的提交,在切换分支之前都会添加到master分支里。

2.分支的运用

Git可以自由地建立分支。但是,要先确定运用规则才可以有效地利用分支。

2.1 Merge分支

为了可以随时发布release而创建的分支,它还能作为Topic分支的源分支使用。保持分支稳定的状态是很重要的。如果要进行更改,通常先创建Topic分支,而针对该分支,可以使用Jenkins之类的CI工具进行自动化编译以及测试。

​ 通常,大家会将master分支当作Merge分支使用。

2.2 Topic分支

Topic分支是为了开发新功能或修复Bug等任务而建立的分支。若要同时进行多个的任务,请创建多个的Topic分支。

​ Topic分支是从稳定的Merge分支创建的。完成作业后,要把Topic分支合并回Merge分支。

5.Topic分支.png

3.分支的切换

​ 切换作业的分支,要进行checkout操作。进行checkout时,git会从工作树还原向目标分支提交的修改内容。checkout之后的提交记录将被追加到目标分支。

6.checkout操作演示.png

3.1 HEAD

​ 指向的是现在使用中的分支的最后一次更新。通常默认指向master分支的最后一次更新。通过移动HEAD,就可以变更使用的分支。

7.提交的技巧.png

3.2 stash

​ 还未提交的修改内容以及新添加的文件,留在索引区域或工作树的情况下切换到其他的分支时,修改内容会从原来的分支移动到目标分支。

​ 但是如果在checkout的目标分支中相同的文件也有修改,checkout会失败的。这时要么先提交修改内容,要么用stash暂时保存修改内容后再checkout。

stash是临时保存文件修改内容的区域。stash可以暂时保存工作树和索引里还没提交的修改内容,您可以事后再取出暂存的修改,应用到原先的分支或其他的分支上。

8.stash.png

4.分支的合并

​ 完成作业后的topic分支,最后要合并回merge分支。

​ 合并分支有2种方法:使用merge或rebase。使用这2种方法,合并后分支的历史记录会有很大的差别。

待续

RecordDate:2023/02/27