资料均来自网络整理,若有侵权,请联系删除。
此文章主要为B站git教程视频笔记整理
一、git
(一)、git介绍
-
git是一款分布式版本控制工具(软件)
-
发展历程
① 文件复制
② 本地版本控制
③ 集中式版本控制(SVN)
④ 分布式版本控制(git)
(二)、安装和配置
Ⅰ、安装
-
说明:只能在本地进行安装,且版本控制只在本地,中心是在仓库
-
从git官网进行下载安装
Ⅱ、配置
-
三种个人信息配置方式
①当前项目配置(.git/config)
-
配置指令
git config --local user.name 'name' git config --local user.email 'xxx@xx.com'
-
进入并编辑指令:进入对应目录编辑文件即可
vim . //进入隐藏文件夹 vim .git/config //编辑配置文件
②全局配置(~/.gitconfig)
-
说明:是在用户名所在(~/.gitconfig),配置好后对所有git项目都通用
-
配置指令(将上面的配置指令中的local改为global就行)
git config --global user.name 'name' git config --global user.email 'xxx@xx.com'
-
进入编辑指令:进入对应目录编辑文件即可
//在用户目录下的.gitconfig vim ~/.g vim ~/.gitconfig
③系统配置(etc/.gitconfig)
-
配置指令
git config --system user.name 'name' git config --system user.email 'xxx@xx.com' //需要root权限,不然无法写入
-
Ⅲ、应用场景
//配置个人信息
git config --local user.name 'name'
git config --local user.email 'xxx@xx.com'
//配置beyond compare
git config --local merge.tool bc3
git config --local mergetool.path '安装路径'
git config --local mergetool.keepBackup false
git remote add origin 地址 //默认添加在本地配置文件中(--local)
Ⅳ、指令小结
//查找顺序:本地->全局->系统
//本地项目配置
git config --local user.name 'name'
git config --local user.email 'xxx@xx.com'
//全局配置
git config --global user.name 'name'
git config --global user.email 'xxx@xx.com'
//系统配置
git config --system user.name 'name'
git config --system user.email 'xxx@xx.com'
//编辑本地项目配置文件
vim . //进入隐藏文件夹
vim .git/config //编辑配置文件
//编辑全局配置文件
vim ~/.g
vim ~/.gitconfig
(三)、gitignore忽略文件设置
-
说明:让git不再管理名单里面的某些文件,支持正则表达式。可以忽略管理文件夹和自身,也可以加“!”表示要管理的文件或文件夹
-
例子:
//进入编辑gitignore指令,使用vim编辑器 vim .gitignore //管理名单举例 *.h //忽略.h结尾的所有文件管理 !a.h //对a.h的文件进行管理 .gitignore //忽略管理gitignore文件自身 files/ //忽略管理files文件夹下的所有文件 *.py[a|c|d] //忽略pya,pyc,pyd的文件
-
github提供了各种语言的gitignore文件,拷贝到本地文件即可
二、git管理
(一)、git简单管理流程
-
流程:进入所要管理的文件夹->进行指令初始化->进行管理->生成版本
-
所需要用到的指令
git init //初始化,即让git帮助我们管理当前文件夹 git status //检测当前目录下文件的状态,是否已经进行管理 /*三种状态的变化 红色:新增的文件/修改了原来老文件 -> (git add 文件名)或(git add .) 绿色:git已经管理起来,->git commit -m '描述信息' 透明:生成版本后,检测不也来,通过状态指令也查不到 */ git tag -a v1 -m "标签信息" //给版本打上标签 git log //查看版本记录信息
(二)、git三大区和转化
Ⅰ、三大分区
-
git分为三大区域:工作区、暂存区、版本库
- 工作区又分为两个部分:已经管理的、新增或修改的(红色)
- 两者之间git会自动识别
- 暂存区(绿色):数据缓冲作用
- 版本库(无色)
- 工作区又分为两个部分:已经管理的、新增或修改的(红色)
-
操作过程中
- 先由工作区提交到暂存区(将文件管理起来)—— a d d add add 指令(变成绿色)
- 确定后,由暂存区提交到版本库(增加版本信息)—— c o m m i t commit commit 指令
-
三大分区示意图
Ⅱ、各分区转化
-
工作区回退
git checkout - - 文件名.后缀名
-
由暂存区恢复到工作区
git reset HEAD 文件名.后缀名
-
版本回滚常用指令
git reset - - hard +(commit后面数值,版本号——哈希值) //版本回滚 git reflog //查看版本信息,可用reset再次恢复之前版本
-
等等
(三)、指令小结
git init
git add
git commit -m '描述信息'
git log
git reflog
git reset --hard 版本号 //版本回退
git checkout -- 文件名//工作区文件回退
git reset HEAD 文件名//暂存区回退到工作区
三、分支
(一)、分支作用
-
作用:便于同一项目,不同版本同时开发,避免代码产生分歧。
-
意义:
- 不同的任务组在不同的分支上开发,互不影响
- 比如说,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,也就是说,主线上都是稳定的代码,可以直接拿来发布的。
-
经常会使用的分支
/* 主分支(master) 开发分支(develop) 功能分支(feature) 预发布分支(release 修补bug分支(bug) */
(二)、分支合并
- 合并过程:先切换到要合并到的分支,再使用merge指令进行合并,若有需要可以删除不要分支
//所用到的指令
git checkout 分支名//切换分支
git merge 分支名 //合并分支
/*
合并冲突时,可以通过手动或者软件进行解决
*/
git branch -d 分支名//删除分支
-
一般工作流
-
开发一般有一个主开支(master),一个开发分支(dev)。开发时都在开发分支上写
-
开支分支稳定后,再进行合并
-
截图
-
-
例子示意图
(三)、常用指令小结
git branch //查看分支
git branch 分支名//创建分支
git checkout 分支名//切换分支
git merge 分支名 //合并分支
git branch -d 分支名//删除分支
四、远程仓库(以github为例)
(一)、github介绍
-
github是一个代码托管平台;
-
gitlab是一个软件,可以自己搭建一个仓库
(二)、基于github做代码托管
Ⅰ、托管准备
- 准备:
- 注册帐号
- 创建仓库
- 将本地代码推送至远程仓库
Ⅱ、代码托管
-
新项目代码推送:在github创建仓库后,在本地进行代码推送指令
git init git add README.md //添加说明文档 git commit -m "fist commit" git remote add origin https://github.com/XXXX/仓库名.git //将远仓库链接地址取名为origin //链接在github上面可以查看 git push -u origin master //将master推送至远程仓库
-
从github下载代码
- 指令: git clone 仓库地址 \text{git clone 仓库地址} git clone 仓库地址 ;(内部己实现 git remote add origin 远程仓库地址 \text{git remote add origin 远程仓库地址} git remote add origin 远程仓库地址)
- 所有代码和分支都拿下来了,可以通过 c h e c k o u t checkout checkout 直接切换分支
(三)、push操作免密登录
-
URL中体现
也可以直接编辑配置文件
//使用例子体现 原来的地址:<https://github.com/Lingwu-Sunshine/java-programming-calculator.git> 修改的地址:<https://用户名:密码@github.com/Lingwu-Sunshine/java-programming-calculator.git> //指令 git remote add origin <https://用户名:密码@github.com/Lingwu-Sunshine/java-programming-calculator.git> git push origin master
-
SSH实现
-
生成公钥和私钥(默认放在 ~/.ssh目录下,id_rsa.pub公钥,id_rsa私钥)
指令:
ssh-keygen
-
拷贝公钥的内容,并设置到github中
- 查看公钥指令:
cat ~/.ssh/id_rsa.pub
- 在github设置中配置SSH
- 查看公钥指令:
-
在git本地中配置ssh地址(使用ssh协议)
git remote add origin ssh地址 //配置好就不用输入密码了,通过公钥和私钥已经实现了
-
以后使用
git push origin master //使用ssh推送master分支
-
-
window10管理凭证
-
本节指令小结
原来的地址:<https://github.com/Lingwu-Sunshine/java-programming-calculator.git> 修改的地址:<https://用户名:密码@github.com/Lingwu-Sunshine/java-programming-calculator.git> //指令 git remote add origin <https://用户名:密码@github.com/Lingwu-Sunshine/java-programming-calculator.git> git push origin master ssh-keygen //生成公钥和私钥 cat ~/.ssh/id_rsa.pub //查看公钥指令 git remote add origin ssh地址//配置ssh链接方式 git push origin master //使用ssh推送master分支
(四)、指令小结
git init
git add README.md //添加说明文档
git commit -m "fist commit"
git remote add origin https://github.com/XXXX/仓库名.git //将远仓库链接地址取名为origin
//链接在github上面可以查看
git push -u origin master //将master推送至远程仓库
git clone 仓库地址 //内部己实现 git remote add origin 远程仓库地址
//推送简写和更新代码
git push origin 分支名 //推送代码
git pull origin 分支名 //更新代码
//拉取代码
/*
原理如上面的git区域划分图;
先拉取到版本库,再到工作区
*/
git pull origin(地址别名) 分支名=git fetch origin 分支名+ git merge origin/分支名
五、rebase应用
(一)、记录合并
-
作用:使git记录变的更加简洁
-
第一种应用方式:将多个记录整合成一个记录。多用于本地仓库记录合并,不适合己放远程仓库的版本。
注意:合并记录时,不要和提交push到远程仓库记录进行合并
-
指令:
//第一种指令 git rebase -i 版本号 //将当前所在版本和所提供的版本进行合并 //第二种指令 git rebase -i HEAD~n //从当前版本找最近的n版本进行合并
-
合并过程的注意事项
- 编辑过程中,采用vim编辑器
- 将“pick”改为“s”。“s”的含义为:将所在版本向上一个版本进行合并
- 进行保存退出:先按esc键,再输入英文:,最后wq回车保存(w 是保存,q 是退出vim)
- 写合并后版本的提交信息,然后保存退出
(二)、分支合并(变基)
-
说明:可以将分支合并成一条线
-
所用指令
git checkout 分支名 git rebase 分支名 //要合并到的分支名 git merge 分支名 //合并的分支名
-
操作流程例子:
- 此时处于master分支,先切回dev分支
- 然后执行rebase指令(变基:相当于把dev分支变成基本的枝干),类似于把master分支拿下来到dev分支,变成一条枝干
- 最后切回master分支,再使用merge指令。把dev分支合并到master分支。最后会变成一条线
-
查看记录(图像显示指令)
git rebase 分支名 //将指定分支合并到所处分支 git log --graph //记录图像形显示 git log --graph --pretty=format:"%h %s" //简洁形记录图像显示,只显示版本号(哈希值)和版本信息(注释信息)
(三)、拉取代码分支合并
-
说明:从远程仓库拉取最近版本与本地版本合并时会产生分叉
-
所用到的指令
//从远程仓库拉取代码并进行合并操作 git fetch origin 分支名 //从远程仓库拉取代码 git rebase origin/分支名 //与拉取下来的版本进行合并,注意是“origin/分支名” //合并过程中如果产生冲突,可能需要用到的指令 git add . //然后进行保存版本,继续rebase git commit -m 'xxxx' //保存版本 git rebase --continue //合并产生合并后的版本
(四)、指令小结
//第一种应用
//第一种指令
git rebase -i 版本号 //将当前所在版本和所提供的版本进行合并
//第二种指令
git rebase -i HEAD~n //从当前版本找最近的n版本进行合并
//第二种应用
git checkout 分支名
git rebase 分支名 //要合并到的分支名
git merge 分支名 //合并的分支名
//记录显示
git log --graph //记录图像形显示
git log --graph --pretty=format:"%h %s" //简洁形记录图像显示,只显示版本号(哈希值)和版本信息(注释信息)
//第三种应用
//从远程仓库拉取代码并进行合并操作
git fetch origin 分支名 //从远程仓库拉取代码
git rebase origin/分支名 //与拉取下来的版本进行合并,注意是“origin/分支名”
//合并过程中如果产生冲突,可能需要用到的指令
git add . //然后进行保存版本,继续rebase
git commit -m 'xxxx' //保存版本
git rebase --continue //合并产生合并后的版本
六、多人协同开发(以github代码为例)
(一)、工作流思路
- 从master主分支分出dev,然后每个人再建立自己对应的分支,在自己所在的分支进行编写代码;完成后再进行测试,测试完成后再合并到master分支
(二)、开发流程
-
开发流程
-
在github中多人协同开发:
- 先建立一个组织,并邀请成员设置权限
- 再创建仓库,由leader创建不同分支用于不同功能开发
- 开发完成后,提交review(pull request)
- 然后测试,测试通过后再合并到release(预发版本)中
- 最后再合并到master分支(主分支),进行上线
(三)、任务管理
- isses:文档及任务管理
- 提交问题(可以设置被提问的人,打问题标签)
- 可以查看状态和指派人信息
- wiki项目文档
(四)、指令小结
git tag -a v1 -m "标签信息" //给版本打上标签
git push origin - -tags //给github推送标签信息
git clone -b v1 地址 //
//创建并切换到dev分支指令
git checkout -b dev
//分支推送指令
git push origin dev
七、给开发源贡献代码
-
fork源代码
将别人源代码拷贝到自己的github仓库
-
给源代码作者提交 申请(pull request)
八、学习参考资料
-
B站视频教程
git实战课程 -
Git merge 和rebase的区别
Git merge 和rebase的区别 -
Git知识总览(一) 从 git clone 和 git status 谈起 - 青玉伏案 - 博客园
Git知识总览(一) -
Git知识总览(二) git常用命令概览 - 青玉伏案 - 博客园
Git知识总览(二) -
Git知识总览(三) 分支的创建、删除、切换、合并以及冲突解决 - 青玉伏案 - 博客园
Git知识总览(三) -
Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作 - 青玉伏案 - 博客园
Git知识总览(四) -
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase - 青玉伏案 - 博客园
Git知识总览(五) -
git merge实际流程
git merge实际流程 -
git rebase实际流程
git rebase实际流程