Git搭建及使用
git的搭建和使用
Git 介绍
Git 是一款开源免费的分布式的版本控制系统。是 Linux 之父 Linus Torvalds(林纳斯·托瓦兹)为了方便管理 linux 代码代码而开发的。
Git 可以实现功能:
- 代码备份
- 版本回退
- 多人协作
- 权限控制
Git 工具下载地址:https://git-scm.com/
GIt 官方文档地址:https://git-scm.com/book/zh/v2
Git 准备工作
安装git
安装git
安软件有很多种方式:直网传送门
1.windows系统
https://git-scm.com/download/win
2.linux系统
yum instal1 git -y
3.macos系统
https://git-scm.com/download/mac
Git 基础概念
.git目录 仓库目录
- hooks 目录包含客户端或服务端的钩子脚本,在特定操作下自动执行。
- info 包含一个全局性排除文件,可以配置文件忽略。
- logs 保存日志信息。
- objects 目录存储所有数据内容,本地的版本库存放位置。
- refs 目录存储指向数据的提交对象的指针(分支)。
- config 文件包 含项目特有的配置选项。
- description 用来显示对仓库的描述信息。
- HEAD 文件指示目前被检出的分支。
- index 暂存区数据。
切记: 不要手动去修改 .git 文件夹中的内容。
Git 仓库的三个区域
工作区: 代码编辑区,编辑代码的地方。
暂存区: 修改待提交区。
版本库: 真正存储代码的地方。
本地仓库
生成密钥
ssh-keygen.exe -t rsa -C "xxx@163.com"
ssh-keygen.exe -t rsa -C "xxx@163.com"
三次回车, 即生成私钥和公钥, 生成目录为: /c/Users/wangzaiplus/.ssh
cat ~/.ssh/id_rsa.pub, 复制公钥
登录GitHub, Settings -> SSH and GPG keys -> New SSH Key, 将上一步公钥粘贴至文本框, 保存, 搞定
初始化配置
# --global 表示对所有用户都生效
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
安装git
git --version
Git初始化设置,设置用户名he邮箱地址:
git配置
git config --global user.name "SakuraMuxia"
git config --global user.email "2216847528@qq.com"
#检查是否配置成功
git config --list
验证
ssh -T git@github.com
初始化配置只在git安装之后进行一次即可!
仓库初始化
git init
git init (初始化仓库)
git add . (这里的.表示添加所有文件,也可以自定义添加)
git commit -m ‘添加的注释信息’
git remote add origin ‘url’
git push -u origin master
每次创建新的项目,都要进行仓库初始化;每个新项目初始化一次就可以了。
添加暂存区
git add <file> # 添加指定文件到暂存区
git add -u # 添加所有被删除或被修改的文件到暂存区(不包括新增文件)
git add . # 添加所有修改和新建的文件到暂存区(不包括删除的文件)
git add -A # 添加所有被删除、被替换、被修改和新增的文件到暂存区,推荐使用!
提交版本库
git commit -m "提交日志" # 把暂存区的东西提交到版本库
git commit -am "提交日志" # 把工作区的修改一步到位添加暂存并提交到版本库
查看状态和变化
git status;
该命令会对工作区和版本库进行比较; 也会对暂存区与版本库进行比较。
如果 git status
命令的输出对于你来说过于简略,而你想知道具体修改了什么地方,可以用 git diff
命令。
git diff # 查看当前工作区和版本库的差异 (不包括新增的文件)
git diff --cached # 查看暂存区中的变化
撤销修改和撤销暂存
① 工作区的修改没有添加暂存
git restore <文件名> # 恢复工作区指定文件
git restore . # 恢复工作区所有的修改(恢复之后,新增的文件不会被删除)
会使用版本库当前最前的版本进行恢复!
注意:
git checkout -- <file> # 同 git restore <file> 作用一致
git checkout -- . # 同 git restore . 作用一致
② 工作区的修改已经添加到暂存
如果工作区的修改已经添加到暂存区,先清除暂存区,再恢复工作区。
git restore --staged <文件名> # 把指定文件从暂存区移除
git restore --staged . # 把所有文件从暂存区移除
历史版本回滚
查看历史版本号
git log # 查看提交记录
git log -n # 查看最近的 n 次提交几次,n 是个数字
git log --oneline # 每次提交记录只用一行显示
如果需要查看被回滚掉的提交的版本号:
git reflog
#初始化一个目录为版本库
git init
#将没有被管理的文件,加入git进行管理
git add
#将内容提交到版本库中
git commit
#查看提交的历史记录
git 1og
#查看所有的历史提交记录
git reflog
# 表示只看最近的两次提交
git reflog -n 2
#回退到指定的提交版本记录
git reset --hard commitID
# 查看状态
git status
通过指定版本号回滚
git reset --hard <commitID>
注意:
进行版本回退时,不需要使用完整的哈希字符串(版本号,CommitID),前七位即可。
版本切换之前,要提交当前的代码状态到仓库。
快捷回滚
git reset --hard HEAD^ # 恢复到上个版本
git reset --hard HEAD^^ # 恢复到上上个版本
git reset --hard HEAD^^^ # 恢复到上上上个版本
Git 忽略文件
被忽略的文件
哪些文件需要被 git 忽略:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如 Java 编译产生的
.class
文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
设置忽略文件 .gitignore
忽略文件的文件名是 .gitignore
的文件, 文件内可以设置项目的忽略规则。
忽略文件可以放在项目中的任意目录中,放在哪个目录作用范围就是哪个目录; 一般忽略文件会放在项目的根目录下。
忽略文件的语法
可以用git check-ignore
命令检查 .gitignore
文件格式是否正确。
.gitignore
文件的格式规则如下:
- 空格不匹配任意文件,可作为分隔符,可用反斜杠转义。
#
开头的文件表示注释,可以使用反斜杠进行转义。!
开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用!
也不会再次被包含。可以使用反斜杠进行转义。/
结束的模式只匹配目录以及在该目录路径下的内容。/
开始的模式匹配当前目录下的,(.gitignore
文件所在的目录)**
匹配多级目录,可在开始,中间,结束。*
匹配任意数量的任意字符串。?
通用匹配单个字符。[]
通用匹配单个字符列表。
忽略文件配置示例
# 此为注释
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略子目录下的 TODO 文件
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
忽略已经提交到版本库的文件
对于已经加入到版本库的文件,可以在版本库中删除该文件
git rm --cached 文件名
然后在 .gitignore
中配置忽略。
最后执行 git add
和 git commit
提交即可。
Git 分支
分支介绍
分支并非 Git 的专利,几乎所有的版本控制系统都以某种形式支持分支。
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
分支可以给使用者提供多个环境的可以,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
分支操作
注意: 在进行分支操作之前,一定一定要把工作区都提交了!!!
① 创建分支
git branch 分支名
会根据当前所在的分支进行创建。
② 切换分支
git switch 分支名 (新命令)
# 或者
git checkout 分支名
③ 创建并切换到该分支
git switch -c 分支名
# 或者
git checkout -b 分支名
④ 查看分支
git branch
⑤ 重命名分支
git branch -m 分支名 新的名字
⑥ 删除分支
git branch -d 分支名
⑦ 合并分支
如果把 A 分支合并到 B 分支上,先切换到 B 分支上。
git merge 分支名 # 把指定的分支合并到当前分支
合并分支解决冲突
当多个分支修改同一个文件后,合并分支的时候就会产生冲突。冲突的解决非常简单,将内容修改为最终想要的结果,然后继续执行 git add
与 git commit
就可以了。
1. 有主分支和开发分支,保持同步
2. 开发购物车,基于开发分支,创建一个 shopcart 分支,在 shopcart 分支上开发
3. 开发订单模块,基于开发分支,创建 order 分支,在 order 分支上开发
4. 开发完成后,shopcart 分支和 order 分支都需要合并到开发分支;shopcart 分支、order 分支删除
5. 在开发分支上测试,解决bug,将开发分支合并到主分支
分支使用的过程
V3是 一个里程碑的版本
开发在dev的分支进行开发后续的功能V5 V6
当master出现bug时,只需要把dev切换到master上。
创建bug分支,修复bug,创建版本V6
把bug分支合到master上V7
然后dev继续开发V8,开发完成
把master代码合到dev分支上做测试,排除冲突V9
再把dev合到master分支上V10
分支的命令代码
---1---
# 查看git分支
git branch
# 创建分支
git branch dev
# 切换到dev分支
git checkout dev
---2---
# 合并代码
首先回到master分支上
git branch master
站在master分之上把bug分支上的代码合并到master分之上
git merge bug
---3---
把master合并到dev上
git branch dev
合并分支
git merge master
---4---
把dev合并到master分支上
git branch master
git merge dev
git branch # 查看分支
git checkout name # 切换分支
# 站在master:将dev的最新代码合并到master分支;
git merge dev
# 站在bug: 将dev的最新代码合并到bug分支;
git merge dev
删除分支
git branch -d bug
git branch -d dev
Git 远程仓库
GitHub 介绍
Hub 是一个代码仓库的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。可以创建远程中心仓库,为多人合作开发提供便利。
目前,其注册用户已经超过 350 万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python等。
2018 年 6 月 4 日,微软宣布,通过 75 亿美元的股票交易收购代码托管平台 GitHub。
从搜索框,输入,可以查看星数十万以上,会从高到低排列
stars:>100000
GitHub 使用流程
① 场景一: 本地有仓库 远程没有仓库
-
在 github 上创建一个仓库
-
获取到远程仓库的地址
-
本地运行命令, 给仓库地址取别名为 origin
git remote add origin 远程仓库地址
# 仓库地址别名的其他操作
git remote remove 名字; # 删除
git remote rename 名字 新名字; # 改名
git remove get-url 名字; # 查看名字对应的仓库地址
git remove set-url 名字 地址; # 修改名字对应的仓库地址 -
本地仓库提交
-
把本地仓库推送到远程仓库 (第一次),
-u
的意思是记录远程仓库的地址。git push -u origin master
-
以后如果向远程仓库推送
git push master
② 场景二: 本地没仓库 远程有仓库
-
获取到远程仓库的地址
-
本地克隆远程仓库
git clone 远程仓库地址
-
本地仓库如有修改,一定要添加 并提交
-
将本地仓库推送到远程
git push
git push origin 本地分支名:远程分支名
③ 从远程仓库克隆之后,创建本地分支
默认从远程仓库克隆的只有主分支,如果我们需要在其他分支进行开发,只要在本地创建分支即可。
查看所有分支:包括远程的分支
git branch -a
本地创建分支并设置对应的远程分支:
git switch -c 分支名 origin/远程分支名
远程仓库回退
自己的远程分支版本回退的方法
如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。
首先要回退本地分支:
git reflog
git reset --hard Obfafd
紧接着强制推送到远程分支:
git push -f
本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支
多人合作
① 创建组织配置权限
首页 -> 右上角 `+` 号 -> new Organization
免费计划
填写组织名称和联系方式(不用使用中文名称)
邀请其他开发者进入组织(会有邮件邀请,==如收不到,请查看垃圾箱==)
配置组织权限,组织首页右侧 settings -> Member privileges -> 选择 write