学习网址
猴子都能懂得git入门
廖雪峰git教程:有视频
菜鸟教程


入门篇-初学者

1.git基础

入门

1.1了解git

  • Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。
  • Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
  • 用Git管理文件的话,更新的历史会保存在Git,所以不需要备份文件。

1.2 仓库(repository)

数据库也是仓库(repository),是记录文件或目录状态的地方,存储着内容修改的历史记录。在仓库的管理下,把文件和目录修改的历史记录放在对应的目录下。

仓库分类

  • 本地 :字面意思,就是在自己得机器上配置数据库。

  • 远程 :配有专用得服务器,为了多人共享建立的数据库。

创建仓库

  • 建全新的仓库

  • 克隆远程仓库

1.3 修改记录的提交

若要把文件或目录的添加和变更保存到数据库,就需要进行提交。

  • 执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。

  • 提交是以时间顺序排列状态被保存到数据库中的。凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。

  • 系统会根据修改的内容计算出没有重复的40位英文及数字来给提交命名。指定这个命名,就可以在数据库中找到对应的提交。

  • Tips

1.提交时,会要求输入提交信息,空白会提交失败。
2.不同类别的修改,要尽量分开提交。(便于从历史记录查找修改内容)
3.提交格式注解

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

1.4 工作树和索引(暂存)

工作树:实际操作的目录

在数据库和工作树之间,存在索引。【工作树–>索引–>数据库】
注意: 没有接入索引的文件,不能提交。

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

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

1.5 实操命令

  • git安装,这里选择命令行

    git环境:windows、Mac
    安装:GUI安装(TortoiseGit)、命令行安装

  • 初期设定

    安装Git之后,请输入您的用户名和电子邮件地址。该设置操作在安装Git后进行一次就够了。这些信息将作为提交者信息显示在更新历史中。

    1
    2
    $ git config --global user.name "<用户名>"
    $ git config --global user.email "<电子邮件>"

    以下命令能让Git以彩色显示。

    1
    $ git config --global color.ui auto

    其他:为git命令设置别名,含有非ASC||字符设置,外部编辑器兼容。(这里不做阐述,查看顶部猴子教程)

  • 新建数据库
    右键,点击git bash,输入:

    1
    git init <目录>

    此时,在本地创建了一个对应的文件夹,里面有一个.git文件夹。

  • 提交文件
    在目录中新建一个文件,然后将文件添加到仓库中。

    • 确认工作树和索引的状态,此时,git bash命令显示这个文件是红色的。
      1
      git status
    • 将文件添加到暂存(索引),此时,git bash命令显示这个文件是绿色的。
      1
      2
      git add test.txt
      git add . //可以把所有文件加入暂存
    • 提交文件
      1
      git commit -m "提交信息"
    • 使用log命令,可以查看提交记录
      1
      git log
      如下:

      $ git log
      commit ac56e474afbbe1eab9ebce5b3ab48ac4c73ad60e
      Author: eguchi eguchi@nulab.co.jp
      Date: Thu Jul 12 18:00:21 2012 +0900
      first commit

当然,了解原理后,可以使用工具插件提高效率,在vs code中使用git插件,可以直接点击按钮即可达到以上效果。

2. 共享数据库

2.1 push推送

1
git push

执行Push之后,本地的修改记录会被上传到远程数据库。
远程数据库的修改记录就会和本地数据库的修改记录保持同步。

2.2 clone远程数据库

1
git clone 地址

简单理解:长传代码合并

2.3 pull拉取

进行拉取(Pull) 操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。

1
git pull

简单理解:下载代码合并

2.4 实操

  • 在GitHub建立仓库

  • push到仓库
    给远程数据库取一个别名:这样,下次推送的时候就不需要输入长串的远程数据库地址了。

    1
    $ git remote add <name> <url>

    在<name>处输入远程数据库名称,在<url>处指定远程数据库的URL。

push命令向数据库推送更改内容:

1
$ git push -u <repository> <refspec>...

注意: <repository>处输入目标地址,<refspec>处指定推送的分支.当执行命令时,如果您指定了-u选项,那么下一次推送时就可以省略分支名称了。

  • clone仓库

    1
    git clone <repository> <directory>

    在<repository>指定远程数据库的URL,在<directory>指定新目录的名称。

  • 从clone的仓库进行push

    1
    2
    3
    git add 
    git commit -m
    git push
  • 从远程仓库pull
    git pull

3. 整合修改记录

  • 合并

在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝。

这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更就会丢失。

  • 解决冲突

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

出现等号分割线:

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

需要手动修改。


高级篇-有经验

1. 分支(branch)

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

1.1 创建分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git branch (branchname)
```
+ master分支
在数据库进行最初的提交后, Git会创建一个名为master的分支。之后的提交,在切换分支之前都会添加到master分支里。

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

+ Topic分支
> Topic分支是为了开发新功能或修复Bug等任务而建立的分支。若要同时进行多个的任务,请创建多个的Topic分支。 Topic分支是从稳定的Merge分支创建的。完成作业后,要把Topic分支合并回Merge分支。

#### 1.3 分支的切换
> 若要切换作业的分支,就要进行checkout操作。进行checkout时,git会从工作树还原向目标分支提交的修改内容。checkout之后的提交记录将被追加到目标分支。
``` bash
git checkout (branchname)
  • HEAD

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

  • stash

    还未提交的修改内容以及新添加的文件,留在索引区域或工作树的情况下切换到其他的分支时,修改内容会从原来的分支移动到目标分支。
    但是如果在checkout的目标分支中相同的文件也有修改,checkout会失败的。这时要么先提交修改内容,要么用stash暂时保存修改内容后再checkout。
    stash是临时保存文件修改内容的区域。stash可以暂时保存工作树和索引里还没提交的修改内容,您可以事后再取出暂存的修改,应用到原先的分支或其他的分支上。

1.4 分支的合并

完成作业后的topic分支,最后要合并回merge分支。合并分支有2种方法:使用merge或rebase。使用这2种方法,合并后分支的历史记录会有很大的差别。

1
git merge 

你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。

理论:https://backlog.com/git-tutorial/cn/stepup/stepup1_4.html

1.5 分支的删除

1
git branch -d (branchname)

1.6 列出分支

1
git branch

没有参数时,git branch 会列出你在本地的分支。

2. 远端数据库

  • pull

  • fetch

  • push

3. 标签

3.1 添加轻标签

3.2 添加注解标签

3.3 删除标签

4. 改写提交

4.1 修改最近的提交

4.2 取消过去的提交

4.3 遗弃提交

4.4 提取提交

4.5 改写提交历史

4.6 回合分支提交

git索引

是从通过Git的操作来查找其具体方法。
Git索引

常用命令