Git的使用
git介绍
git: 全称是分布式版本控制系统.
特点: 协同开发, 版本控制.
git工作流程
git分支管理
git的安装
git命令
-
初始化仓库命令
git init 文件夹
- 命令:
git init 文件夹
git init
当前路径下所有文件都被管理
- 说明
被管理的目录下会生成一个.git/缓存目录, 这个目录被删除就管理的记录就没有, 所有的版本管理, 都记录在这个目录中.
- 命令:
-
设置作者信息
git config --global xxx
- 命令
git config --global user.email '邮箱'
git config --global user.name '名字'
- 说明
# git config --global user.email '邮箱' global配置全局变量 会自动生成.gitconfig文件 c盘:/用户/用户名/.gitconfig # git config user.email '邮箱' 项目内配置局部变量 会在.git目录下自动生成config文件 # 局部优先于全局
- 命令
-
查看状态
git status
- 命令
git status
- 命令
-
代码提交到暂存区
git add 文件
- 命令
git add 文件
:将指定文件提交到暂存区git add .
:将当前目录下所有文件提到暂存区
- 命令
-
将暂存区的内容提交到版本库
git commit -m '提交说明'
- 命令
git commit -m '提交说明'
:将暂存区的内容提交到版本库
- 命令
-
查看版本库的日志
git log
- 命令
git log
- 例子
13600@Python MINGW64 /d/git/test (master) $ git log commit 393e9aaf074e2984f9269891436a7e2980898b30 (HEAD -> master) # 版本号 Author: python_21 <1360012768@qq.com> # 作者 Date: Mon May 16 19:49:29 2022 +0800 # 更新时间 提交a.txt # 备注信息
- 命令
-
回滚到当前版本的最新记录
git checkout .
- 命令
git checkout .
:回滚到当前版本的最新记录
- 说明
这步是由工作区返回到修改前最初的样子
- 命令
-
切换到任意一个被管理版本状态
it reset --hard 版本号
- 命令
it reset --hard 版本号
- 说明
版本号 可以是完整的可以值提供首部几个字符, 6个这样, 前面的字段重复就不好了.
- 命令
-
将暂存区所有的文件回滚到工作区
git reset HEAD .
- 命令
git reset HEAD .
:git reset HEAD 省略写法 git reset .git reset HEAD 文件
:将暂存区指定的文件回滚到工作区
- 说明
只更改了暂存区的状态!
- 命令
忽略文件
忽略文件: 指定某些文件不被或文件夹不被git管理.
- 语法
语法:(空目录默认不被管理) # 注释 写文件夹的名字表示该文件夹被忽略. 写文件的名字表示该文件被忽略. 目录/ 某个目录下的所有文件, 文件夹被忽略. /目录 当前目录下某个目录内所有文件, 文件夹被忽略. 通配符: ? 匹配一个任意字符 * 匹配0个或多个任意字符 [x-y] 匹配x-y之间的数据 [^] 逻辑非, 排除没有匹配到的所有数据
- 配置文件
在被管理目录的根路径下新建.gitignore 文件, 在这个文件中配置信息.
分支操作
-
创建分支
git branch 分支名
- 命令
git branch 分支名
- eg
13600@Python MINGW64 /d/git/test (master) $ git branch dev
- 命令
-
查看所有分支
git branch
- 命令
git branch
- eg
13600@Python MINGW64 /d/git/test (master) $ git branch dev * master # 当前所在分支, 呈现绿色
- 命令
-
切换分支
git checkout 分支名
- 命令
git checkout 分支名
- eg
13600@Python MINGW64 /d/git/test (master) $ git checkout dev # 切换到分支“dev” Switched to branch 'dev' D a.txt 13600@Python MINGW64 /d/git/test (dev) $ git branch * dev # 当前所在分支, 呈现绿色 master
- 命令
-
创建分支并切换到该分支
git checkout -b 分支名
- 命令
git checkout -b 分支名
- eg
13600@Python MINGW64 /d/git/test (dev) $ git checkout -b prod Switched to a new branch 'prod' 13600@Python MINGW64 /d/git/test (prod) $ git branch dev master * prod
- 命令
-
删除分支
git branch -d 分支名
- 命令
git branch -d 分支名
- eg
13600@Python MINGW64 /d/git/test (prod) $ git branch -d dev # 删除分支 Deleted branch dev (was a31cb1b).
- 命令
-
查看远程分支
git branch -a
- 命令
git branch -a
- 命令
-
合并分支, 将其它分支合并到当前分支
git merge 分支名
- 命令
git merge 分支名
- 说明
如果当前在dev分支, 想要把dev分支合并到master分支, 需要先切换到其他分支(基础分支), 在合并.
- 命令
分支冲突
两个开发者修改了同一行代码, 后提交会报错, 后提交的人需要解决冲突.
远程仓库
-
在gitee中新建一个luffy仓库
-
远程连接仓库
git remote add origin https://gitee.com/xxxxx.git
-
将主分支提交到远程仓库的origin(源目录-->master)中
git push -u origin "master"
第一次提交需要添加仓库的账户密码
可以在控制面板中修改这个信息
克隆/下拉/上传
克隆: git clone https地址
下拉: git pull 仓库分支 本地分支 / git feacth 仓库分支 本地分支(这个几乎不用)
上传: git push 仓库分支 本地分支
-
从远程仓库中克隆到本地
git clone 仓库地址
- 仓库地址http
账号密码登录
- 仓库地址ssh
- 仓库地址http
-
上传代码到远程仓库
git push origin master
- 仓库代码没有被更新的情况下可以直接上传
- 远程仓库代码被更新, 需要先下拉更新版本, 才能上传
ssh连接
几个概念
- bash64: 编码
- md5: 不能解密, 被称为签名.
ssh连接使用非对称加密, 在终端使用命令生成一个公钥一个私钥.(存放在家目录下的.ssh)
- 对称加密: 加密与解密使用同一套密码.
- 非对称加密: 加密使用公钥, 解密使用私钥.
-
查看本地是否存在私钥.
命令:ls ~/.ssh
ls ~/.ssh
-
创建非对称加密的公钥与私钥
ssh-keygen -t rsa -C"Gitee的注册邮箱"
- 命令
ssh-keygen -t rsa -C"Gitee的注册邮箱"
- eg
# 创建非对称加密 13600@Python MINGW64 ~/Desktop $ ssh-keygen -t rsa -C"xxxxxxx@qq.com" Generating public/private rsa key pair. # 输入保存密钥的文件(不设置就直接回车) Enter file in which to save the key (/c/Users/13600/.ssh/id_rsa): # 创建目录 /c/Users/13600/.ssh Created directory '/c/Users/13600/.ssh'. Enter passphrase (empty for no passphrase): # 再次输入相同的密码短语(不设置就直接回车) Enter same passphrase again: # 您的身份已保存在/c/Users/13600/中。ssh/id_rsa Your identification has been saved in /c/Users/13600/.ssh/id_rsa # 您的公钥已保存在/c/Users/13600/中。ssh/id_rsa.pub Your public key has been saved in /c/Users/13600/.ssh/id_rsa.pub # 关键指纹是: The key fingerprint is: SHA256:Bh9YCR5d4BNHcU+euzBAkZLcteuGrKAyv9y8xwXfYw0 1360012768@qq.com # 钥匙的随机特征是: The key's randomart image is: +---[RSA 3072]----+ | o++BB=o . | | . =*+o. = . | | + +.. . + | | o.o .E. . | | So .+o. | | . .oo+o.. | | .. .o.o.. | | o. + .o. . | | +=.+o. | +----[SHA256]-----+
- 命令
-
再次查看本地私钥
ls ~/.ssh
13600@Python MINGW64 ~/Desktop $ ls ~/.ssh id_rsa 私钥 id_rsa.pub 公钥
-
为仓库设置公钥
$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCq7TeeqcKCK8U6zATpBLTaxUiiRfkn...
-
更换远程连接仓库链接
git remote set-url origin git@gitee.com:python_21/luffy.git
-
命令
git remote set-url origin git@gitee.com:python_21/luffy.git
-
说明
-
-
下拉代码测试
git clone git@gitee.com:python_21/luffy.git
# 你确定要继续连接(是/否/[指纹])吗?对 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 连接之后再.ssh目录中生成一个文件, 记录通信, 如果删除, 下次连接还需要输入yes.
Pycharm 连接git
-
使用Pychrm打开本地项目的目录
-
在Pycharm的settings中配置 git.exe
-
新建文件
-
将文件添加到暂存区
-
将暂存区文件添提交到版本库
-
选择 Commit and Puch 提交到远端
-
提交/下拉
-
远端本地文件对比
-
版本日志
-
git工具栏
-
git 控制
-
从版本控制获取(克隆)
-
-
新建分支
-
切换分支
-
Terminal中 使用命令操作
-
恢复到指定版本
协同开发冲突
下拉代码后报错
<<< HEAD
自己需要提交的
=====
远程仓库的
>>>>> origin/master
更改并标记已解决, 在重新提交即可
线上合并分支
-
主分支一般会被设置为保护分支, 不允许直接修改.
-
远端创建分支的两个方式:
- 直接操作远程仓库界面新建分支
- 在本地新建分支, 提交到远端
- 直接操作远程仓库界面新建分支
-
新建Pull Request (拉取请求)
扁平化分支, 变基并合并 是对log的展示方式,即减少合并日志
分支合并冲突
-
线上分支合并冲突
线上合并有问题, 先在本地解决冲突在提交.
线上版本回滚
-
切换到主分支
git checkout master
-
切换版本
git reset --hard 8e05c5
-
查看版本记录
git log
与git reflog
git log
就是我们想要的结果, 第二个版本之后的都不要了, 新增一个xxx.txt的版本
git reflog
显示历史版本记录(想要回退到第二个版本之后的使用这个查看版本号)