了解git

Git 是一个分布式版本控制系统,用于跟踪文件的变化,特别是源代码文件。它允许多个开发者协作开发,管理项目的历史记录,并在需要时恢复到先前的版本。具有版本控制、分布式、分支、合并、远程控制等功能。

官网安装

地址:

1
https://git-scm.com/download/win

下载安装之后,终端使用git - v查看是否会回显版本,如果回显了就是安装成功。windows操作系统上安装之后会自动安装git bash。

初始化配置

配置用户名

1
git config --global user.name 用户名

省略(Local):本地配置,只对本地创库有效

—global:全局配置,所有仓库生效

—system:系统配置,对所有用户生效

注意:用户名中有空格的话需要用双引号括起来,否者直接使用

配置邮箱

1
git config --global user.email 邮箱

保存配置

概述:保存你的初始化配置,在之后的提交就用不着输入这些信息

1
git config --global credential.helper

查看配置信息

1
git config --global --list

新建仓库

创建仓库

方法一:本地创建

1
git init

注意:使用该命令,会直接在当前目录里生成一个git仓库,如果在这个命令后面添加一个目录名称,就会直接在本目录下生成一个以你定义的目录名称生成新文件夹,这个文件夹里面就是一个新的仓库

如:git init yufusir这个命令会在当前目录中生成一个yufusir的文件夹,文件里面就是新建的仓库

方法二:远程服务器上克隆一个存在的仓库

1
git clone 仓库地址

工作区和文件状态

git分区

概述:git的本地数据管理分为三个区域,工作区(.git所在的目录)、暂存区(.git/intdex用于临时即将提交修改的修改内容)、本地仓库(.git/objects用于存储git存储代码和版本信息的主要位置)

git中文件的状态

未跟踪:新创建但没被git管理起来的文件

未修改:已经被git管理起来的,但文件没有被修改

已修改:已经修改过的文件,但没有添加到暂存区里面

已暂存:已经修改过的文件,并添加到暂存区的文件

添加和提交文件

查看仓库状态

概述:查看当前仓库处于哪个分之,文件处于怎样的状态

1
git status

注意:如果你看见自己的仓库的分支名称master而不是main,这个是由于git版本的问题,不影响我们的操作

添加到暂存区

概述:将未跟踪文件添加到暂存区

1
git add 文件名

注意:使用git add .会将所有文件添加到缓存区

提交

概述:将已暂存的文件提交到仓库

1
git commit -m "提交信息"

注意:这里-m如果不写会进入一个交互界面,默认使用vim来编辑提交信息,vim的基础操作有,使用方向键来移动光标,使用i键进入编辑模式,esc键回到命令界面,输入:wq保存退出即提交完成

这里如果将-m改为-am的话,这里命令就会同时完成添加暂存区和提交仓库这两个操作,但是不推荐使用,两个命令分开使用是个非常好的习惯

提交记录

概述:查看提交记录

1
git log

使用git log —online可以查看简洁的提交记录

回退版本

概述:撤销之前的修改内容,回退之前的某个版本

git reset的三种模式

  • —soft 回退到某个版本,并且保留工作区和暂存区的所有修改内容
  • —hard 回退到某个版本,并且丢弃工作区和暂存区的所有修改内容
  • —mixed 回退到某个版本,只保留工作区的修改内容,丢弃暂存区的修改内容,reset命令的默认参数

后面接第几次修改的id或者HEAD^,HEAD^表示上一次的修改内容

查看已跟踪文件

概述:包括已修改、已暂存和已提交的文件

1
git ls-files

回溯git操作

概述:git的所有操作都可以回溯,当不小心误操作的时候,需要回溯操作时使用

示例:当误操作使用了—hard

第一步:参看操作记录,找到误操作做前的版本号

1
git reflog

第二步:回退指定版本

1
git reset --hard 版本号

第三步:确认是否成功退回

1
git log --online

查看差异

git diff

概述:用于查看不同版本之间的差异,查看工作区】暂存区、本地仓库之间的差异、查看不同分支之间的差异

git diff的操作

  • 直接使用git diff会查看工作区与暂存区的差异

  • git diff HEAD可以查看暂存区和版本库的差异,git diff —cached与此操作一致

  • git diff 版本1id 版本2id 查看两个版本的差异内容
  • git diff 版本id HAED 即可查看指定版本与当前版本的差异,HAED是git的重要重要的概念,它指向分支最新的提交分支点
  • git diff HAED~ HAED 表示当前版本与上一个版本的差异,其中~可以用^替换,效果一样,符号后面接数字表示上几个版本
  • git diff 分支名1 分支名2 比较分支之间的差异

注意:如果后面接上文件名,就只会查看此文件在两个版本的差异

删除文件

有以下操作:

  • 使用rm file先从工作区删除文件,使用git add file然后再从暂存区删除内容
  • git rm 文件名 可以将文件从工作区和暂存区同时删除
  • git rm —cached 文件名 把文件从暂存区删除,保留在当前工作区中
  • git rm -r* 递归删除某个目录下的所有子目录和文件,删除后不要忘记提交

忽略文件

概述:git中里有个特殊文件,叫做.gitignore文件,这个文件的作用也就是可以让我们忽略掉一些不应该被加入到版本库的文件。例如:系统或者软件自动生成的文件、编译产生的中间文件和结果文件、运行时生成日志文件、缓存文件、临时文件和涉及身份、密码、口令、密钥等敏感信息文件

如何操作

添加一个.gitignore文件,将想要忽略的文件的文件名添加到.gitinore文件中即可。例如:在文件中添加*.log就可以。如果想要忽略文件夹的话需要在文件中添加文件夹名并接上一个反斜杠/

注意:.gitignore文件生效有个前提,忽略的文件不能是已经被添加到版本库中的文件

.gitignore匹配规则

首先.gitignore从上到下逐行匹配,每一行表示一个忽略模式

规则:

  • 空行或者以#号开头的行会被git忽略。一般空行用于可读性的分隔,#一般用作注释
  • 使用标准的Blod模式匹配,例如:
    • 星号*通配任意个字符
    • 问号?匹配单个字符
    • 中括号[]表示匹配列表中的单个字符,比如:[abc]表示a/b/c
  • 两个星号**表示匹配任意的中间目录
  • 中括号可以使用短中线连接,比如:
    • [0-9]表示任意一位数字, [a-z]表示任意一位小写字母
  • 感叹号!表示取反

SSH配置与克隆仓库

github的使用

概述:使用github创建一个仓库,完成时会跳转一个界面,会出现一个亮眼的地址串,在这个前面有两个按钮HTTPS与SSH,它们是使用远程仓库的两种方式,HTTPS这种方式在我们把本地代码push到远程仓库时需要验证用户名与密码(但是这个好像已经停用了),SSH方式则不需要密码,但需要在github上添加ssh公钥的配置。其次这个界面有告诉我们怎么把本地仓库与这个远程仓库关联起来。

.ssh配置

​ 首先找到.ssh文件,这个文件一般放在C:\Users\用户名\ .ssh,注意这个文件是隐藏文件,如果找不到的话就直接生成一个.ssh文件,然后进入这个文件里使用终端,输入ssh-keygen -t rsa -b 4096即可以为我们生成rsa协议4096大小的ssh密钥,回车之后它提示我们需要输入密钥的文件名称,这里就需要注意一下,如果你是第一次使用这个命令的话就直接使用回车即可,它会生成一个id_rsa的密钥文件,但是你之前配置过密钥文件的话,这个时候不要回车,否则会覆盖我们之前的密钥文件,这个操作不可逆。我属于第二种情况,所以我在这输入一个新的文件名即可,之后又会让我们输入两次密码,操作过后就完成了密钥的生成并有新的文件生成,一个XXX文件和一个XXX.pub文件,其中XXX文件是私钥文件(谁要也不给!!!),XXX.pub文件则是公钥文件,我们打开公钥文件并复制里面的内容,回到github页面在点击头像弹出的菜单中再点击settings,再点击左侧有个ssh和gpg密钥配置,在里面点击新建ssh密钥按钮,然后把刚刚复制的公钥内容粘贴到输入框内,取一个任意的标题再点击添加即可。如果再本地配置时没有指定新文件的话ssh的配置已经完成了,如果跟我一样指定文件名的需要创建修改一下config配置文件,需要添加

1
2
3
4
5
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/XXX文件

这个的意思是当我们访问github的时候,指定使用ssh下的XXX文件这个密钥

本地仓库与远程仓库

注意:本地修改不会影响到远程仓库,远程仓库的修改也不会影响到本地仓库

git clone repo-address 可以将远程仓库的东西复制到本地仓库

git push 可以把本地仓库的修改推送给远程仓库

git pull 可以把远程仓库的修改拉到本地仓库

关联本地仓库和远程仓库

添加一个远程仓库

1
git remote add <shortname> <url>

查看当前仓库对应的远程仓库的别名和地址

1
git remote -v

指定分支为main

1
git branch -M main

将本地main分支与远程的main分支关联起来

1
git push -u origin main:main

注意:如果两个分支名相同,则使用git push -u origin main即可

拉取远程仓库的修改内容

1
git pull <远程仓库名><远程分支名>:<本地分支名>

在GUI和IDE中使用Git

概述:常见的图形化工具有github desktop、sourcetree、gitkraken(收费),如果只使用github而且只用简单的图形化工具,推荐使用github desktop

分支简介和基本操作

概述:分支是git中一个非常重要的一个功能,我们可以把它看作代码库中的不同版本,可以独立存在并有自己的提交记录,非常适合团队开发和开发管理

查看当前仓库的所有分支

1
git branch

创建新分支

1
git branch 分支名

切换分支

1
git checkout 分支名

注意:git checkout 后面接文件名表示恢复文件到修改前的状态,当分支名与文件名相同时,此命令默认切换分支而不是恢复文件

1
git switch 分支名

合并分支

1
git merge 被合并分支

注意:使用这条命令需要在目标分支,这条命令会把被合并分支合并到目标分支

查看分支图

1
git log --graph --oneline --decorate --all

删除分支

删除已合并分支

1
git branch -d 分支名

删除未合并分支

1
git branch -D 分支名

解决合并冲突

概述:如果出现冲突,需要手动编辑冲突文件,修改保存再添加暂存与提交,则解决冲突

使用git merge —abort可以在提交之前中断合并

回退和rebase

恢复用merge合并且被删除的分支

1
git checkout -b 分支名 提交id

回退指定提交点

1
git reset --hard 提交id

rebase

概述:会把分支合并在当前分支的最前面,成支线,不产生节点

1
git rebase 分支名

注意:merge优点是不会破环原分支的提交历史,方便回溯和查看,缺点是会产生额外的提交节点,分支图复杂。rebase优点是不会新增额外的提交记录,形成线性历史,比较直观和干净,缺点是会改变提交历史,改变当前分支branch out的节点。避免在共享分支使用rebase

分支管理和工作流模型

gitflow模型适用于团队技术水平适中,有一定的开发流程和规范的团队

githubflow模型适用于技术水平比较高的团队或者开源项目