GIT 基本使用
GIT 版本控制系统
1 git介绍
1.1 代码管理软件
Git是一种版本控制系统,可用于跟踪和管理代码的更改,以及与其他人协作。
1.2 git作用
① 帮助开发者合并开发的代码,协同开发
② 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
③ 代码版本管理
1.3 git与svn比较
git与svn都是常见的版本控制系统
-
SVN:集中式管理
-
Git:分布式管理、协同开发、版本管理
2 git远程仓库
2.1 下载git
git官网:https://git-scm.com/
1.下载对应版本:
https://git-scm.com/download
2.安装git:在选取安装路径的下一步选取
Use a TrueType font in all console windows 选项
2.2 git,gitee,github,gitlab
① git是版本管理软件,装在操作系统上,有很多命令
② gitee远程仓库:国内最大的开源远程仓库
开源代码,私有代码,可以看到有哪些开源代码,通过网站做一些配置
③ github远程仓库:国际上最大的开源仓库
④ gitlab:公司自己搭建的内部的远程仓库
3 git的使用流程
3.1 git工作流程
三个区
① 工作区:存放文件的地方,开发程序代码的地方
② 暂存区:工作区的更改,暂时提交到缓存区(内存中临时存储)
③ 版本区:本地开发的代码
3.2 git常用命令
(1) 初始化仓库
文件夹作为仓库,被git管理
git init # 初始化仓库,当前文件夹多出.git文件夹,如果删除就不是git仓库了,之前的版本再也找不回来了,也不能被git管理了
git init xxx # 在上一级敲
.git目录
默认隐藏,可以通过命令ls -ah
查看
(2) 查看暂存区和工作区的文件状态
在.git所在文件夹下执行
git status
有两种颜色:
- 红色:工作区变化了,但是没有提交到暂存区
- 绿色:已经提交到暂存区了,没有提交到版本库
- 没有颜色:所有东西都是在版本库中了,都被git管理起来了
(3) 把工作区变更提交到暂存区
# 添加单个文件
git add 文件夹
# 添加所有文件
git add .
(4) 把暂存区内容,提交到版本库
git commit -m '注释:对于本次提交的说明,一定要加注释'
(5) 设置作者(全局、局部)
① 全局:
当前操作系统下所有仓库,提交到版本库时,都用这个作者
git config --global user.email '用户邮箱'
git config --global user.name '用户名'
该操作会在全局文件 C:\Users\用户文件夹\.gitconfig
新建用户信息,在所有仓库下都可以使用
② 局部:
局部只针对当前仓库 (不带--global
)
git config user.email '用户邮箱'
git config user.name '用户名'
在当前仓库下的config新建用户信息,只能在当前仓库下使用
一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
(6) 查看版本库的版本信息
git log
git reflog
(7) 把工作区的变更,回退【还没有放到暂存区】
将增加的内容、删除
git checkout .
(8) 把暂存区,拉回到工作区[由绿变红]
# 撤销所有暂存区的提交
git reset HEAD .
# 撤销某一文件的暂存区
git reset 文件名
# 撤销所有暂存区的提交
git reset .
(9) 回到某个版本
只要被版本管理了,就可以回退到任意一个状态下
git reset --hard 版本号
回滚到上一个版本:
>: git reset --hard HEAD^
>: git reset --hard HEAD~
回滚到上三个版本:
>: git reset --hard HEAD^^^
>: git reset --hard HEAD~3
回滚到指定版本号的版本:
>: git reset --hard 版本号 (重点)
>: eg: git reset --hard 35cb292
3.3 git过滤文件
项目中添加过滤文件,加了之后,被过滤的文件/文件夹就不被git管理了
操作步骤:
① 在仓库目录下 .git
所在目录下,新建.gitignore
② 在.gitignore
里面编写过滤规则
- 忽略某个文件夹(写文件夹名):
node_modules
- 忽略某个文件(写文件名):
.DS_Store
- 忽略以
npm-debug.log
开头的所有文件:npm-debug.log*
- 忽略以
.sln
结尾的所有文件:*.sln
- 忽略
a文件夹
下的aa.txt
:a/aa/txt
.gitignore
是要被管理起来的
小总结:
① 红色信息:也就是在工作区有内容,就指定 add 命令
② 绿色信息:内容在暂存区,执行commit
③ 只有版本库中的代码,才能被监听,才能回滚到任何一个版本
4 git的分支
1.1 分支
主分支的版本都是可以查看的版本
我们都在开发分支开发,开发完成合并到主分支
主分支:只记录版本
开发分支:进行开发
1.2 分支操作
① 分支查看
# 查看本地分支
git branch
# 查看远程分支
git branch -a
② 分支创建
git branch 分支名
git branch -b 分支名
(加-b表示创建并切换)
③ 分支切换
git checkout 分支名
④ 分支删除
git branch -d 分支名
1.3 合并分支
① 先来到主分支
git branch checkout master
② 执行合并命令(分支合并有可能会出现冲突)
git merge 分支名
公司中的分支方案:
- master分支,dev分支,bug分支,所有人在dev分支开发,开发完成合并到主分支
- master分支,dev分支,bug分支,个人分支,个人在个人分支上开发,开发完成合并到dev分支
2 git远程仓库
将本地的版本提交到远程仓库,远程仓库可选择gitee,github,gitlab等等
gitlab的搭建过程:https://zhuanlan.zhihu.com/p/413217715
2.1 操作步骤
(1) 将代码提交到本地仓库
① 将本地仓库做成远程仓库
git init
② 设置忽略文件
.gitignore
③ 将该仓库工作区提交到暂存区
git add .
④ 提交版本管理
git commit -m ’提交了‘
此时项目已经被提交了本地版本库,被git版本管理了
(2) 远程创建仓库
① 远程要创建仓库:例如在gitee上创建仓库
② 填一些信息,需要保证仓库是空的
(3) 本地连接并设置远程仓库
① 安装远端仓库
git remote add origin https://gitee.com/duoduosg/luffy_api.git
② 把本地的版本库推送到远程仓库
git push -u origin "main"
需要输入用户名密码,输入一次,以后就不用输入了(本地保存了:凭据管理)
win:
打开
我的电脑
,在地址栏输入【 控制面板\用户帐户\凭据管理器 】mac:
cmmand + 空格
,输入【钥匙串】
(4) 配置远程仓库全流程
Git 全局设置
git config --global user.name "ziduo shangguang"
git config --global user.email "123@qq.com"
创建一个新仓库
git clone git@192.168.1.63:duo/a-a-a.git
cd a-a-a
git switch -c main
touch README.md
git add README.md
git commit -m "add README"
git push -u origin main
推送现有文件夹
cd existing_folder
git init --initial-branch=main
git remote add origin git@192.168.1.63:duo/a-a-a.git
git add .
git commit -m "Initial commit"
git push -u origin main
推送现有的 Git 仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin git@192.168.1.63:duo/a-a-a.git
git push -u origin --all
git push -u origin --tags
3 ssh方式连接远程仓库
ssh方式连接远程仓库,需要公钥和私钥
-
私钥在本地保存
-
公钥配置在gitee上
以后提交代码,不需要其他任何认证了
3.1 使用步骤
教程:https://gitee.com/help/articles/4181
① 生成公钥私钥
在终端中输入
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
# Generating public/private ed25519 key pair...
按照提示完成三次回车,即可生成 ssh key。通过查看 ~/.ssh/id_ed25519.pub
文件内容,获取到你的 public key
② 查看公钥,并在gitee的公钥管理中配置
cat ~/.ssh/id_ed25519.pub
③ gitee中部署公钥
复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。
④ 添加主机到本机SSH可信列表
添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access.
内容,则证明添加成功。
⑤ 删除https对应的地址,改成ssh的
# 删除https对应的地址
git remote remove origin
# 该成ssh对应的地址
git remote add origin git@gitee.com:duoduosg/luffy_api.git
4 协同开发
4.1 设置权限
仓库管理员,邀请开发者进入,邀请的开发者,对这个仓库就有读写权限,他们就可以开发代码,提交
4.2 协同开发步骤
① 从远程仓库把代码clone下来
git clone [项目地址]
# 拉取指定分支
git clone -b [分支名] [项目地址]
② 使用pycharm打开并配置好解释器,安装好依赖
③ 开发代码并用git管理并上传
git add
# 设置项目用户名和邮箱
git config user.name xxxxx
git config user.email xxxxxx@xxxx.com
git commit -m '注释'
git push origin master
5 冲突解决
5.1 原因
① 多人在同一分支开发
② 分之合并出现冲突
5.2 冲突出现的原因1:多人在同一分支开发冲突
例如:
# 多人在同一分支开发冲突
-张三:
git pull origin master
在requirements.txt`,最后一行加入 lqz
git add .
git commit -m
git push origin master
-我:
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git pull origin master
# 冲突了
# 解决冲突 冲突的 箭头去掉,阅读代码,选择保留或删除别人或自己的代码,再提交
# 提交到远程仓库,这是解决后的
# 冲突出现的样子:你如果要删除别人的代码,你需要跟别人说一声
<<<<<<< HEAD 我的代码
print('刘亦菲')
======= 它的代码
print('彭于晏')
>>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5
减少冲突的办法:勤拉取代码
5.3 冲突出现的原因2:分支合并出冲突
-我:
1 创建dev分支
git branch dev
2 在dev分支的views.py 中第2行加入代码
3 提交到本地仓库
-我:
1 在主分支的views.py 中第2行加入代码
2 提交到版本库
3 在主分支合并代码 git merge dev
4 冲突了,解决冲突
5 再提交代码,到此结束
6 合并分支
6.1 分支操作
① 查看远程分支
git branch -a
② 查看本地分支
git branch
③ 创建分支
git branch [新分支名]
④ 创建并切换分支
创建并切换分支
git checkout -b 分支名
切换分支
git checkout
⑤ 从主分支里创建新分支
git checkout master -b 新分支名
⑥ 合并某分支到当前分支
git merge 分支
6.2 线下合并分支
切换main分支下,合并到另一个分支
git merge dev
6.3 线上合并分支
线上创建分支需要再gitee中点击新建分支,并在本地同步远程分支
① 本地同步远程分支
这个时候已经拉下来了该分支,但是得checkout 进去切进去才能看到该分支
git pull origin 分支名
② 本地切换到该分支上开发
git checkout 分支名
③ 本地推到远程仓库
git push origin dev
④ 远程的dev合并进远程的master需要提交pr/rr
,在网站上申请了pull request后才会合并
7 远程仓库回滚
① 本地版本回退
git reset --hard 版本号
② 强行推到远端
git push origin master -f