如果出现无法载图的情况,请检查与github的连通性
git原理与安装git
git和svn是私有代码管理工具,git是分布式、svn是集中式
github(代码仓库)相当于远程的仓库,开发人员可以通过git进行提交到github,也可以从clone with https进行拉取
整个过程:
workspace通过git add加载到缓存,再通过commit推送到本地仓库repository,再通过push推送到远端仓库如gitlab、github、码农

git的安装与使用
1 2 3 4 5 6 7 8 9 10 11 12
| mac自带git;
linux安装git: yum -y install git sudo apt install git
windows安装git: https://gitforwindows.org
有两种使用方法 1.使用git gui 2.使用git bash
|

git初始化
1 2 3 4 5 6 7 8 9 10 11 12 13
| 进入目标目录
git config --global user.name "Durative" git config --global user.email "1320991378@proton.me"
新建一个project文件夹,并在终端进入文件夹 将这个文件夹当做本地仓库
git init
|

git add与commit
1 2 3 4 5
| vim test.txt 123123
$ git status 显示红色文件代表新建/修改
|

1 2 3 4
| git add test.txt/git add . git status 此时为绿色,表示已经放入了暂存区,并没有放到本地仓库
|

1 2 3
| git commit -m '说明文字' test.txt 出现下面文字说明已经提交到本地仓库中
|

1 2 3 4 5 6 7 8 9
| vim test.txt 此时红色字,表示已经修改
git add test.txt git commit -m "2" test.txt 显示一个文件修改了,其中增加了一个字节
|

git代码版本回退
1 2 3 4 5 6
| git log
vim test.txt
git diff test.txt
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| git add . git status git commit -m "3" .
git log
git reset --hard HEAD^ 提示已经回退到描述文字"2"的版本 再次回退 提示回退到描述文字"描述文字"的版本
$ cat test.txt 123123
|

1 2 3 4
| git reflog 查看所有提交 git reset --hard 7a60bcc 回退到第二个版本 git reset --hard 4e8ded1 回退到第三个版本
|

git放弃文件修改
总结:
在commit后只能用git reset —hard 来撤销commit
在add后只能用git reset HEAD来撤销ad
在add前后用checkout来撤销代码修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 先做一下修改 此时git status肯定为红色
此时使用,可以针对单个文件(撤销修改),或针对全部进行(全部撤销) 回退到上次commit之后的版本 git checkout test.txt
此时再git status 就会发现提示没有变化
git status 有红有绿
git checkout test.txt
此时git status为绿色 git reset HEAD 撤销一次后,此时git status为红色 git checkout 则会回退到上次commit的版本
|

git恢复被删除的文件
前文说到git checkout来撤销修改
1.没有执行add的,直接恢复删除文件
1 2 3 4
| rm test.txt git checkout test.txt
|
2.已经执行add的,需要进行撤销add,并且恢复
1 2 3 4 5 6 7 8 9
| vim test.txt git add . git status rm test.txt
先进行回退add操作 git reset HEAD . 再使用checkout进行恢复 git checkout .
|

git配置远程仓库
github作为远程仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 使用ssh密钥作为token 1.首先要生成本机的ssh密钥文件 ssh-keygen -t rsa -C "1320991378@proton.me" 默认路径为/c/Users/13209/.ssh/id_rsa (最好区分开,因为不同远程仓库需要用不同的公钥) 会生成一对密钥 2.查看公钥 cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVGcT/zSPB6XZDz7Zdt5RNY6leCH9Q4jDQNgp15cya5xFbn8i5LUeI0xepgBUsvRnO73zVBqOA4VqLsrDx11NblpeVMmscBM0cWQ+QoNHHVCtM0ARwopdcSiJjVv5yqLSP8gFjdhEhJOVrfSE7LCzIl/InMVSDaOcW/GM3sRcNqig0vtmEfldZYTCJT5Ozr01Pp6YcRZCxwK4IsFDLmV5nS981p7yqdSkzo4Eu51T1l59MFko5H9zzaS87ChmDA+DdWyvzjBuiFKFkXbekfxtg/ri9HuHga1V6e6nZ+KZ+//RYiWOJ4g+vmxF/mhEIDRkZbLYeZZIRzDn9SEBJ9VAndvUmWsjPx5xzXjtDEMSLLaK487uZww/jVcYRvTC8hHWvwo7yHq7ueGVd7/3/52bM3lOkNdQ6GKp1EreNZo6cPhnf4MMfeZWIWKHsguY9B5aUrS+2N1pO/KiO0hZ4WtO+ofn1j1XyO+XDIXkr3xlOATZHlvtVzk2PNDjJI+Ox4+8= 1320991378@proton.me 将公钥复制到github账号中
3.github创建一个仓库,选择非公开,我创建的名称叫laptop 全称为durative/laptop 获取它的ssh地址 git@github.com:Durative/laptop.git 在本机操作,关联远端仓库 git remote add origin git@github.com:Durative/laptop.git
4.测试 $ git branch -a * master
推送 $ git push origin -u master 此时github中已经有了
|

git分支管理

蓝色dev就是开发分支
黄色release是预打包版本,测试没通过时,领取bug单,修复后再次打包release;测试通过后更新到master和dev
红色hotfix就是修bug的分支,然后再次合并到master,同时可以用这个再次进行开发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| git branch dev
$ git branch dev * master
git checkout dev
git checkout -b test
$ git branch dev master * test
在dev上修改文件并add vim test.txt git status git add .
add后如果切换master,则文件是修改之后的版本 如果commit上去了,切换master查看,文件是修改前版本
在dev上,提交后就变成了dev的内容,就和master分开了
git merge dev cat test.txt
|

分支合并冲突问题
在不同分支,修改同一文件,在最后合并的时候就会冲突,如果冲突,需要手动解决
复现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| git checkout dev cat > test.txt << EOF > dev. > EOF $ git add . $ git commit -m "dev branch" .
$ git checkout master cat > test.txt << EOF > master. > EOF $ git add . $ git commit -m "master branch" .
git checkout master 提示需要手动进行修复和确认 cat test.txt <<<<<<< HEAD > master. > EOF
======= dev. >>>>>>> dev
手动将HRAD === 和 dev去掉之后
$ git commit -a [master 3b60d3e] Merge branch 'dev'
|

bug分支问题
在dev开发,突然master有bug需要处理,临时处理bug,切换master时
需要将dev的工作环境隐藏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 在dev开发,突然master有bug需要处理,临时处理bug,切换master时 需要将dev的工作环境隐藏, git stash git status
git checkout -b hot_fix echo "repair complete" >> test.txt git commit -m "bug repair" test.txt
git checkout master git merge hot_fix
git status pop
|

多人远程分支冲突
A开发上传1版本
B开发从github拉取1版本的dev代码
并且再次push到origin,标记为2版本
此时A和B的版本不同
A开发push到dev
报错有冲突
1 2 3 4 5 6 7 8 9 10 11 12 13
| git pull 首先拉取
git branch --set-upstream-to=origin/dev
此时删除HEAD和===等即可 修改完后 git push origin dev
B开发进行git pull并关联 此时代码已经合并
|

git tag
为了更好区分commit的版本进行的操作
一般来说用commit号来管理版本,但commit号太长太难记
类似于docker tag
master版本上线后应该都要打tag备份,防止时态有变化
以后可以根据tag来回滚版本
1 2 3 4 5 6 7 8 9 10 11 12
| git tag 2.0
git tag -a v1.0 a2277c2a920f9e30f5824648d9105155c3022eef
git tag git show 2.0
git reset --hard <commit号>
|
