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
忽略已经提交到版本库的文件
方式1:
对于已经加入到版本库的文件,可以在版本库中删除该文件
// 检查某个文件是否被缓存
git ls-files --cached | grep 文件名
git rm --cached 文件名
然后在 .gitignore
中配置忽略。
最后执行 git add
和 git commit
提交即可。
// 批量
git rm -r --cached .
git add .
git commit -m "移除已跟踪文件并更新 .gitignore"
以后这个文件就不会再被提交了
这会让 远程仓库里的对应文件被删除,别人拉取代码时文件会消失
方式2:
如果你希望 本地保留、远程也保留,但以后不再跟踪更新,可以用
git update-index --assume-unchanged config.properties
这样文件仍在仓库中,但 Git 假装它不会变。
git忽略仓库更新保存本地文件
远程仓库的 jdbc.properties
文件有更新,但你本地也修改过这个文件,如果直接拉取会导致本地修改丢失
方式一:跳过某些文件更新(推荐)
把文件加入 .git/info/exclude
或 .gitignore
,然后让 Git 不再跟踪它
# 停止跟踪该文件
git update-index --assume-unchanged 001-JavaSE/JavaWeb/IOTCards/resources/jdbc.properties
这样以后 git pull
时不会提示冲突,本地的 jdbc.properties
会一直保留。
如果需要恢复跟踪:
git update-index --no-assume-unchanged 001-JavaSE/JavaWeb/IOTCards/resources/jdbc.properties
不行的话,把这个文件先移动到别处,然后删除这个文件,这时再拉一下仓库到本地,文件同步过来后,设置忽略本地改动,把这个文件再覆盖过去。
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 分支名 # 把指定的分支合并到当前分支