Git操作说明

Day15 Git 课堂笔记

1 Git 介绍

Git 是一款开源免费的分布式的版本控制系统。是 Linux 之父 Linus Torvalds(林纳斯·托瓦兹)为了方便管理 linux 代码代码而开发的。

Git 可以实现的功能:

  • 代码备份

  • 版本回退

  • 多人协作

  • 权限控制

Git 工具下载地址:https://git-scm.com/

GIt 官方文档地址:https://git-scm.com/book/zh/v2

 

2 Git 准备工作

2.1 常用 Linux 操作

① 常用 Linux 命令

ls      列出当前目录下所有的文件和目录
命令选项:
-a 列出当前目录下的包括隐藏文件在内的所有文件和目录
-l 列出当前目录下的文件和目录的详细信息
-al 列出当前目录下的包括隐藏文件在内的所有文件和目录的详细信息


cd 目录路径 进入指定的目录
    cd .. 表示进入上一个目录
   

mkdir 目录名 创建一个目录

touch 文件名 创建一个文件

cat 文件名 快速读取文件中的内容(适合文件中的内容不是太多)

mv 旧的名字 新的名字 重命名文件或目录

rm -rf 路径 删除文件或目录

clear 清空当前的命令行工具

② 常用快捷键

tab     路径补全

ctrl + L 清空当前的命令行工具

ctrl + C 结束当前正在执行命令

键盘上下方向键 查看历史命令

2.2 Vim 的使用

vim 可以用来读取、编辑文件内容,使用 vim 命令打开文件。

如果 vim 打开的文件的不存在,会自动创建。

vim 文件名

vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)

 

① 命令模式

vim 文件名 打开文件之后,进入的就是命令模式; 在命令模式下不可编辑内容。

常用命令:

  • i 命令,可以进入输入模式。

  • x 命令,删除当前光标后面的字符。

  • : 命令,可以进入底线命令模式。

② 输入模式

在命令模式下,输入 i 命令可以进入输入模式,

在输入模式下,可以编辑文本内容。

ESC 可以退出输入模式,回调命令模式。

③ 底线命令模式

在命令模式下,输入 : 可以进入底线命令模式。

在底线命令模式下,可以进行保存或退出。

  • w 命令,保存。按完回车执行,回到命令模式。

  • q 命令,退出,如果没有没存是无法退出的,如果要强制退出,可以使用 q!,可以不保存就退出。

  • wq 命令,保存并退出。可以使用 wq! 表示强制保存并退出。

 

 

3 Git 基础概念

3.1 .git 目录 仓库目录

  • hooks 目录包含客户端或服务端的钩子脚本,在特定操作下自动执行。

  • info 包含一个全局性排除文件,可以配置文件忽略。

  • logs 保存日志信息。

  • objects 目录存储所有数据内容,本地的版本库存放位置。

  • refs 目录存储指向数据的提交对象的指针(分支)。

  • config 文件包含项目特有的配置选项。

  • description 用来显示对仓库的描述信息。

  • HEAD 文件指示目前被检出的分支。

  • index 暂存区数据。

切记: 不要手动去修改 .git 文件夹中的内容。

 

3.2 Git 仓库的三个区域

  • 工作区 (代码编辑区)

  • 暂存区 (修改待提交区)

  • 版本库(代码保存区)

 

4 Git 基础命令总结

4.1 初始化配置

git 工具安装完成之后,要先进性一次初始化配置;只配置一次集合,以后不需要配置。

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

如果要查询配置的情况,可以使用以下命令:

git config -l

4.2 仓库初始化

git init

每个项目都要进行一个仓库初始化,通过仓库的初始化可以创建与该项目对应的仓库。

会在当前的目下创建一个 .git 目录,.git 目录是个·隐藏文件,该目录就是仓库目录。

4.3 查看状态

git status

4.4 添加暂存区

git add <file>  # 添加指定文件到暂存区
git add -u   # 提交所有被删除或被修改的文件到暂存区(不包括新增文件)。
git add .   # 提交所有修改和新建的文件到暂存区(不包括删除的文件)。
git add -A   # 提交所有被删除、被替换、被修改和新增的文件到暂存区。 推荐!!!

4.5 提交版本库

git commit -m '注释信息'    # 提交暂存区到版本库并注释。 
git commit -a -m '注释'    #一步添加且提交修改。(新增的文件不会提交)

4.6 查看暂存前后具体的变化

git diff    # 查看工作区(没有添加缓存的)和版本库的差异 (不会显示新添加的文件)
git diff --cached # 查看暂存区和版本库的差异

4.7 撤销修改和撤销暂存

git resotre <file>  # 撤销工作区中的修改,指定文件,会与版本库对比 (无法撤销新增的文件)
git restore . # 撤销工作区中所有的修改;会与版本库对比 (无法撤销新增的文件)

git restore --staged <file> # 指定文件,把修改从暂存区撤销
git restore --staged . # 把所有修改从暂存区撤销
# 旧的 git 命令
git checkout -- <file>  # 同 git restore <file> 作用一致
git checkout -- .   # 同 git restore . 作用一致

4.8 历史版本回滚

① 查看历史版本号

git log     # 查看所有历史版本号
git log -n # 查询最近的前 n 次提交的版本号;n 是数字。
git log --oneline # 查询所有历史版本号,在一行显示;版本号只显示前七位
git reflog  # 查看包括已删除的版本在内所有的历史版本号!

② 通过指定版本号回滚

git reset --hard b815fd5a6ae655b521a31a9

注意:

进行版本回退时,不需要使用完整的 commitId(版本号),前七位即可。

版本切换之前,要提交当前的修改状到仓库。

③ 快捷回滚

git reset --hard HEAD^    # 恢复到上个版本
git reset --hard HEAD^^    # 恢复到上上个版本
git reset --hard HEAD^^^    # 恢复到上上上个版本

 

 

5 忽略文件

5.1 被忽略的文件

项目目中有些文件是不需要进入版本库中,比如编辑器的配置。

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;

  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如 Java 编译产生的.class文件;

  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

5.2 设置忽略文件 .gitignore

在该文件中配置想要忽略的文件

该文件可以放在项目内的任意目录下,放在哪个目录只对哪个目录以及子目录进行设置。

通常,忽略文件放在项目目录下。

5.3 忽略文件的语法

  1. 空格不匹配任意文件,可作为分隔符,可用反斜杠转义。(空格没意义)

  2. # 开头的文件标识注释,可以使用反斜杠进行转义。

  3. ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义。

  4. / 结束的模式只匹配目录以及在该目录路径下的内容。(不加也可以)

  5. / 开始的模式匹配当前目录下的,(.gitignore 文件所在的目录)

  6. ** 匹配多级目录,可在开始,中间,结束。

  7. * 匹配任意数量的任意字符串。

  8. ? 通用匹配单个字符。

  9. [] 通用匹配单个字符列表。

以用git check-ignore <file> 命令检查 .gitignore文件格式是否正确。

git check-ignore .gitignore

5.4 忽略文件配置示例

# 忽略 readme.md 文件 (目录下自己子目录所有的 readme.md)
readme.md

# 忽略当前目录下的 readme.md
/readme.md

# 忽略所有以 html 为后缀的文件
*.html

# 忽略当前目录下 以 html 为后缀的文件
/*.html

# 忽略目录
configs/

# 忽略当前目录下的 指定目录
/configs/


# 忽略所有的 以html为后缀的文件,除了 index.html
*.html
!index.html

# ? 匹配一个任意字符; * 匹配任意数量的任意字符
??.html

# .html 的前面只能有一个字符,该字符可以是 a、b或c
[abc].html


# 忽略 static 目录下的 以html为后缀的文件(只是static目录下,不包括子目录)
static/*.html

# 忽略 static 下以及子目录下 以 html 为后缀的文件
static/**/*.html

 

6 Git 分支

6.1 分支介绍

分支并非 Git 的专利,几乎所有的版本控制系统都以某种形式支持分支。

使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

分支

6.2 分支操作

① 创建分支

git branch <nmae>

② 切换分支

git switch <nmae>
# 或者
git checkout <name>

③ 创建并切换到该分支

git switch -c <name>
# 或者
git checkout -b <name>

④ 查看分支

git branch

⑤ 删除分支

git branch -d <name>    # 分支能被删除的前提是,以及合并到了其他分支
git branch -D <name> # 强制删除分支

⑥ 合并分支

git merge <name>    # 把指定的分支合并到当前分支
git merge <name1> <name2> <name3> # 合并多个分支到当前分支

把 shopcart 分支合并到 dev 分支,本质会在 dev 分支上做一次提交。

shopcart 在合并到 dev 之前,一定要把自己的修改都提交的。

6.3 合并分支冲突解决

发生冲突的原因: 两个分支对同一个文件进行了修改,合并的时候必然冲突。

解决冲突: 合并之后,处于 mergeing 状态,手动修改代码解决冲突,添加并提交。

 

 

7 GitHub - Git 远程仓库

7.1 GitHub 介绍

Hub 是一个代码仓库的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。可以创建远程中心仓库,为多人合作开发提供便利。

目前,其注册用户已经超过 350 万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python等。

2018 年 6 月 4 日,微软宣布,通过 75 亿美元的股票交易收购代码托管平台 GitHub。

网址:https://github.com

从搜索框,输入,可以查看星数十万以上,会从高到低排列

stars:>100000

 

 

7.2 GitHub 使用流程

① 场景一: 本地有仓库 远程没有仓库

  1. 注册并登陆 GitHub 账号。

  2. 在GitHub上,创建远程仓库。

  3. 获取远程仓库的地址。

  4. 本地配置远程仓库的地址

    git remote add origin  https://github.com/unclealan/test2.git
    
    # 如果地址添加错了,需要删除再重新添加
    git remote rm origin  # 删除 origin

    origin 相当于 地址的别名

  5. 本地提交(保证在进行同步之前,本地已经提交)

  6. 向远程仓库推送

    git push -u origin master

    -u origin 可以记录远程仓库的地址,以后推送的的时候只运行 git push 即可

    master 表示提交到远程仓库的 master 分支。

 

② 场景二: 本地没仓库 远程有仓库

  1. 注册并登陆 GitHub 账号。

  2. 获取远程仓库的地址。

  3. 把远程仓库克隆到本地

    git clone  https://github.com/unclealan/test2.git
  4. 本地可以进行 push 操作以及 pull 操作。 无需再指定地址,因为克隆的时候自动指定了。

 

7.3 多人合作

① 创建组织配置权限

首页 -> 右上角 `+` 号 -> new Organization
免费计划
填写组织名称和联系方式(不用使用中文名称)
邀请其他开发者进入组织(会有邮件邀请,==如收不到,请查看垃圾箱==)
配置组织权限,组织首页右侧  settings -> Member privileges -> 选择 write

② 多人合作工作流程

第一天:

1. 克隆远程仓库
2. 进行本地操作,修改代码,添加提交,分支操作
3. 下班之前 先 git pull
4. 最后 git push

推送的时候一定先拉取。

如果远程仓库的版本比本地版本高,是无法推送的。所以一定先拉取。

第二天:

1. 早上 git pull
2. 进行本地操作
3. 下班之前 先 git pull
4. 最后 git push

③ 冲突解决

冲突原因: 两个人向同一个分支提交,修改了相同的文件; 第一推送的会成功推送,第二个人在拉取的时候就会报错。

解决冲突: 手动修改代码,再次添加提交(远程仓库的分支就可以合并到本地分支)。

 

7.4 GitHub 免密登录

  1. 在本地创建密钥对

    ssh-keygen -t rsa -C "xxx@xxx.com"
  2. 文件默认存储在家目录(c:/用户/用户名/.ssh)的 .ssh 文件夹中。

    • id_rsa 私钥

    • id_rsa.pub 公钥

  3. 将公钥(.pub)文件内容配置到账号中

    首页 -> 右上角头像-> settings -> SSH and GPG keys -> new SSH Key

  4. 使用 git 协议的远程仓库地址 git@github.com:unclealan/Myproject03.git

  5. 以后就可以免密操作

 

8 GitFlow - Git 开发流程

 

 

  • Master 主分支。上面只保存正式发布的版本

  • Hotfix 线上代码 Bug 修复分支。开发完后需要合并回Master和Develop分支,同时在Master上打一个tag

  • Feather 功能分支。当开发某个功能时,创建一个单独的分支,开发完毕后再合并到 dev 分支

  • Release 分支。待发布分支,Release分支基于Develop分支创建,在这个Release分支上测试,修改Bug

  • Develop 开发分支。开发者都在这个分支上提交代码

 

 

 

 

原文地址:https://www.cnblogs.com/xincheng-1999/p/14050210.html