git
git
1.什么是git ?
git 是 分布式 版本控制 软件
软件:安装到电脑上的一个工具。




2.git 版本控制
让git 帮我们管理一个文件夹。
1.进入要管理的文件夹
2.初始化
3.管理 目的就是要生成版本‘
# git 的基本使用
1.进入要管理的目录
2.git init 初始化 也就是 让git 帮助我们管理当前文件夹
3.git status 检检测当前目录下的文件的状态
4.三种状态的改变
红色: 新增的文件/修改了老文件 ----》 git add 文件名,管理一个文件 git add . 管理当前文件夹下的所有文件。
绿色: git 已经管理起来了,----》 git commit -m '描述性信息'
生成版本:
3.个人单枪匹马开始干
想要让 git 对一个目录进行版本控制需要以下步骤:
-
进入要管理的文件夹
-
执行初始化命令
git init -
管理目录下的文件状态
git status 注:新增的文件和修改过的文件都是红色 -
管理指定文件(红变绿)
git add 文件名 管理单个文件夹 git add . 管理文件夹下的所有的文件 -
个人信息配置:用户名 、邮箱(一次即可)
git config --global user.email "you@example.com" git config --global user.name "Your Name" -
生成版本
git commit -m '描述性信息' -
查看版本记录
git log![image-20201114224613002]()
-
回滚:想从当前版本 回到以前的任意一个版本。
git log git reset --hard 版本号 (如下图commit 后的一串字符就是版本号)![image-20201115091132176]()
-
想从当前版本回到回滚前的版本,
git reflog 查看各个版本的信息比 git log 更加的详细,有回滚的记录 git reset --hard 版本号 回滚操作还是使用这条命令,(不过这次的版本号是如下图的相比短的版本号)![image-20201115091511433]()
小总结
git init
git status
git add 文件名
git add .
git commit -m '描述性信息'
git log
git reflog
git reset --hard 版本号
以下的命令不是特别的常用
git checkout -- 文件名 将文件的改变取消掉 如下图,在工作区中,由己变动的文件变成己控制的文件。
git reset HEAD 文件名 将文件由暂存区,变成 工作区

4
4.git 分支

对于 git log 后 无法退出的问题 :q :zz

解决冲突,从主分支master 上分出来一个bug分支和一个dev分支 (新功能)
分支出现的原因是在开发新的功能的时候,发现了以前版本的bug ,可以回到主分支,另开一个 修复bug 的分支
进行bug修复 ,bug 修复 完成后,合并到主分支,(git merge bug ) ,然后回到 dev 分支继续开发新的功能,新的功能开发好以后,想把新功能合并到 master分支上, 这时 因为dev 分支是在master 上的bug 没有修复前分出来的,所以dev 上还存在bug ,当它要和主分合并的时候 发现和主分支上的一些代码有冲突,我们需要手动解决冲突,然后再进行合并产生冲突的报错如下。

命令的总结
-
查看分支
git branch -
创建分支
git branch 分支名称 -
切换分支
git checkout 分支名称 -
分支合并(可能会产生冲突)
git merge 要合并的分支 注意:要切换分支后再合并 将分支2 合并到分支1 ,那么需要将分支切换到分支1 ,然后执行 git merge 分支2解决冲突,从主分支master 上分出来一个bug分支和一个dev分支 (新功能)
分支出现的原因是在开发新的功能的时候,发现了以前版本的bug ,可以回到主分支,另开一个 修复bug 的分支
进行bug修复 ,bug 修复 完成后,合并到主分支,(git merge bug ) ,然后回到 dev 分支继续开发新的功能,新的功能开发好以后,想把新功能合并到 master分支上, 这时 因为dev 分支是在master 上的bug 没有修复前分出来的,所以dev 上还存在bug ,当它要和主分合并的时候 发现和主分支上的一些代码有冲突,我们需要手动解决冲突,然后再进行合并产生冲突的报错如下。
![image-20201115103619623]()
-
删除分支
git branch -d 分支名称
5.git 使用的工作流

6.github




7.两地开发,代码的上传和拉取
1.在家里上传代码
-
给远程仓库起别名
git remote add origin 远程仓库地址 -
向远程推送代码
git push -u orgin 分支名 这里只是推送了一个分支
2.到公司新电脑上第一次获取代码
-
克隆远程仓库代码
git clone 远程仓库地址 -
切换分支
git checkout 分支
3.在公司开发
1.切换到dev分支进行开发
git checkout dev
2. 把main分支合并到dev[仅一次]
git merge main
3.修改代码
4.提交代码
git add .
git commit -m '文件名'
git push origin dev 将代码推送到远程仓库
4.回到家中继续写代码
1.切换到dev 分支进行开发
git checkout dev
2. 把远程仓库里的代码拉到本地 (第一次用clone 后面用pull 就行了)
git pull origin dev
3. 继续开发
4. 提交代码
git add .
git commit -m '文件名'
git push origin dev 将代码提交到远程仓库
5.在公司继续开发
1.切换到dev 分支进行开发
git checkout dev
2. 把远程仓库里的代码拉到本地 (第一次用clone 后面用pull 就行了)
git pull origin dev
3. 继续开发
4. 提交代码
git add .
git commit -m '文件名'
git push origin dev 将代码提交到远程仓库
6.开发完毕,要上线
1.将dev 分支合并到master 分支,进行上线
git checkout master
git merge dev
git push origin master
2.把dev 分支也推送到远程
git checkout dev
git merge master
git push origin dev
8.代码的合并问题
场景描述 :小明在公司写代码,写到了很晚,然后匆匆回家, 忘记了将自己写的代码提交到远程仓库上,回到家,发现代码不写完,睡不着觉,于是又在家写代码,准备写代码的时候发现,自己在公司的代码忘记提交到远程仓库上了,于是又重新开了个文件继续写代码,写在公司没有写完的功能。在家写完代码后,小明将代码推送到了远程仓库,当小明回到公司时,要写代码的时候,就涉及到代码的合并问题了,在代码的合并过程中,可能会发生代码的冲突问题。
git pull origin dev 从远程仓库拉取代码
上面这条命令等同于下面两个命令
git fetch origin dev
git merge origin/dev
9.git rebase(变基)
使git 的提交记录变的简洁

整合记录 多个记录进行合并, 合并记录时,不要将己经提交到远程仓库的记录进行合并。
将多个记录整合成一条记录,git rebase
两种用法:
第一种方式:
git rebase -i 版本号 把最新的记录和版本号之间多条记录进行合并
第二种方式:
git rebase -i HEAD ~3 从当前记录找最近的三条记录进行合并

把上图的第二行的pick 变成 s
第三行的pick 变成 s 如下图
- s: 将当前这个版本合并到上一个版本去
- wq 保存

下图是合并信息 修改合并信息

可以合并成如下格式 :wq 保存退出


将分叉分支c3 合并到 c2 和 c4 之间 如上图所示
1. 先切回到c3所在的分支 git checkout c3所在的分支
2. git rebase c2 和c4 所在的分支
3.切换到 c2 和 c4 所在的分支
4. git merge c3所在的分支名
将上图有分叉的合并成没有分叉的

小明在家写的代码和小明在公司写的代码,在公司里进行合并的时候 ,利用pull 的方法可能会产生分叉,
利用rebase 可以解决掉这个问题
从github 上拉取代码的时候
git fetch origin 分支名
git rebase origin/分支名
将 git pull origin 分支名 变成上面的二条命令
注意事项: 执行git rebase 时可能会产生冲突,
去解决冲突
解决冲突后,根据提示去执行命令, 然后再执行 git rebase --continue
10.快速解决冲突
1.安装 beyond compare
2.在 git 中进行配置
git config --local merge.tool bc4
git config --local mergetool.path '软件的路径' D:\Beyond Compare 4\BCompare.exe
git config --local mergetool.keepBackup false
--loclal只在当前配置有效
3.应用beyond compare 去解决冲突
git mergetool
11.总结
-
添加远程连接(别名)
git remote add origin 地址 -
推送代码
git push orign 分支名 -
下载代码
git clone 地址 将所有的代码都下载了下来 -
拉取代码
git pull origin 分支名 等价于 git fetch origin 分支名 git merge origin/分支名 -
保持代码提交整洁(变基)
git rebase 分支 -
记录的图形展示
git log --graph git log --graph --pretty=oneline git log --graph --pretty=format:'%h %s' %h代表hash 值,也就是版本号, %s 描述性信息
12多人协作开发git流程



创建分支并切换到分支
git checkout -b 分支名
给当前版本加一个标签
`git tag -a v1 -m '描述性信息'
13.给开源软件贡献代码
1.fork源代码
将别人的源代码拷贝到我自己的仓库
2.在自己的仓库进行代码的修改
3.给源代码的作者提交 修复bug 的申请(pull request)
14.git配置文件
配置
-
查看配置文件
vim .git/config -
项目配置文件 项目/.git/config
git config --local user.name '用户名'
git config --local user.email 'xx@xx.com'
-
全局配置文件 用户名/.gitconfig ~/.gitconfig
git config --global user.name '用户名' git config --global user.email 'xx@xx.com' -
系统配置文件 /etc/.gitconfig
git config --system user.name '用户名' git config --system user.email 'xx@xx.com' 注意需要 root权限应用场景
用户的配置 解决冲突时beyond compare 的配置 远程提交的配置 git remote add origin 地址 ,默认添加在本地的配置文件中(--local)
15.免密登录
url 中体现
原来的地址:https://github.com/Red-brief/this-is-git-practice.git
修改的地址:https://用户名:密码@github.com/Red-brief/this-is-git-practice.git
git remote add origin https://用户名:密码@github.com/Red-brief/this-is-git-practice.git
git push origin master
ssh实现 (企业里使用这个比较多)
1.生成公钥和私钥(默认放在~/.ssh 目录下 ~/.ssh/id_rsa.pub 公钥 ~/.ssh/id_rsa 私钥 )
在git命令行使用 ssh-keygen命 令生成
2.拷贝公钥的内容,并设置到github上
通过在git中执行这个命令可以拿到公钥:cat ~/.ssh/id_rsa.pub
并设置到github中
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5cv4GqT/r3Gsj/VNxcLxxxxxxxxxxxxx3FAaVNyXzRkZRpz1bfEJrs5ZzJcmsA9Y59kqaO2jHlROTV0QHJTN2xqnIt4Z4lichMX0L+8+giCxr7YCAI/l8VjOK50akbEn7xyQORgJFSSjUc0nnjSJi4/T7R/sySUCJUHoxlFdneSlH+X7/jGZPZArRQ9HXrt4UO1wyn4jlsXk0hng9+5s/4Inq6R3GabLN/eh1UoqR0TEkEllpaD4OxAx1RzwRt5YOUKJRCT09PJFlQMkUWf9XBh8Cp5Nvw6ZB9gmaA30+0gXxxxxxxxxxxx5UPtBDo66B4xkXERK/CVCMMzOWvH8bGEgCg4T+cNfvFluoi7c2SjFP5oZ9jI3z0khe9Z8mGwpeayDG9+mczq5sy7oi+jPYE0eJlqPI4qYVaENEFn7g7gBs/92oRqhpXHs= blood@LAPTOP-1153TVOA
3.在git 本地配置ssh 地址
git remote add origin git@github.com:Red-brief/this-is-git-practice.git
4.以后使用的时候:
git push origin master


添加完成了

git自动管理凭证
电脑自动的帮你保存了密码
16.git忽略文件
创建一个.gitignore 文件, 把不想让git 管理的文件的文件名存储在其中

如上图 *.h ,凡是以.h 结尾的文件都不再管理了
!a.h 除了 a.h ,继续管理 a.h文件
files/ files文件夹下的内容都不再管理了
cat .gitignore 查看 .gitignore 文件的内部内容
更多可以参考giithub 或者百度
17.git做任务管理
-
issues 文档以及任务管理。
![image-20201116111241249]()

- wiki 项目的文档说明。







浙公网安备 33010602011771号