一、Git学习网站
- 廖雪峰大神 Git 教程
- Git-flow 包教不包会
- 阮一峰-常用 Git 命令清单
二、Git简介
1.Git是什么
分布式版本控制系统
2.版本控制
3.集中式 vs 分布式
4.Git简史
5.工作区、暂存区、版本库
-
流程
工作区:写代码 --> git add --> 暂存区 --> git commit --> 版本库
- 工作区: 就是我们能看见的写代码的地方
- git管理的代码: 默认都是git管理对象
- git忽略的代码设置,如下操作:
- 项目的根目录新建一个文件:
.gitignore
- 哪些内容要忽略,就在里面书写路径,我要忽略node_modules文件夹,就在里面写上node_modules
- 项目的根目录新建一个文件:
- 暂存区: 就是形成一个历史版本
- 本地仓库: 历史版本的存放区域
6.远程代码托管平台
- GitHub
- Gitee - 基于 Git 的代码托管和研发协作平台
- gitlab
7.下载安装
-
下载
-
官网下载地址
-
国内淘宝镜像下载地址
-
-
安装
双击, 一直下一步
-
检测
-
在任意位置打开命令行
git --version
-
在任意位置点击鼠标右键,出现: Git Bash Here
-
就表示安装成功!
-
三、Git命令行操作
1.本地仓库初始化
git init
2.配置用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
3.基本命令操作
-
状态查看
git status
-
添加到暂存区
git add .
-
提交到本地仓库
git commit -m "这次提交的日志"
-
查看历史记录
git log
-
版本回退与前进
-
查看所有历史版本
git reflog
-
恢复指定版本
git reset --hard 版本号
-
-
撤销修改
-
工作区撤销修改
git checkout -- 文件名
-
暂存区修改
git reset HEAD 文件名
-
4.分支操作
4.1 查看分支
-
查看本地仓库的分支情况
git branch
-
查看远程仓库的分支情况
git branch -r
-
查看本地与远程的所有分支情况
git branch -a
结果中带*的表示当前分支
4.2 创建分支
-
创建分支
git branch 分支名
-
创建分支,并切换到新创建的这个分支上
git checkout -b 分支名
4.3 切换分支
git checkout 分支名
注意:本地如果不存在这个分支,则会把远程的给弄下来,如果远程也没有,就报错
4.4 合并分支
git merge 要合并的分支名称 -m "新版本的描述"
4.5 删除分支
git branch -d 分支名
5.远程分支(代码托管平台)
-
创建远程库
-
远程库与本地关联
git remote add 别名(默认origin) 远程仓库地址
-
查看本地库与远程库的关联信息
git remote -v
-
克隆远程库
git clone 远程仓库地址
-
上传远程分支
git push -u 远程仓库名 本地分支名:远程分支名
-
删除远程分支
git push 远程仓库名 --delete 要删除的分支名
-
拉取远程分支
git fetch 远程仓库名 远程分支名:本地分支名
-
合并远程分支
git merge 本地分支名 -m 新版本的描述
-
拉取远程分支与本地当前分支合并
git pull 远程仓库名 远程分支名
-
拉取远程分支与本地某个分支合并
git pull 远程仓库名 远程分支名:本地分支名
-
团队间协作开发
-
跨团队协作开发
- 将这个开源的项目 fork 一份到我的远程仓库
- clone 我 fork 的这个项目到本地
- 写好代码推送到自己的远程
- 创建 pull request
-
ssh免登录
-
需要先查看本地电脑是否有 ssh 相关的东西 (用户目录下是否有 .ssh 的文件夹)。有就先删除吧。
-
创建 ssh key
ssh-keygen -t rsa -C "邮箱地址"
-
接着在 用户目录下找到 .ssh 文件夹中的 id_rsa.pub 这个文件
-
复制 id_rsa.pub 中的内容
-
去远程托管平台上添加 ssh
1 这时克隆项目时就可以直接选择使用 ssh 的方式
2 先将本地的https的连接方式给删除,换成 ssh 的连接方式
-
四、Git工作流
1.集中式
大家全部都在一个分支上写代码master
2.git flow
不同分支用来干不同的操作
3.forking
fork pull request 这套操作
五、Git基本操作(工作场景)
-
接到新的需求要你开发。
-
基于主干分支(master、main、test)创建一个需求分支 (store-xxx)
a. 远程平台上创建
b. 本地创建 -
拆分任务
a. 任务1:静态页面编写 2h
b. 任务2:逻辑联调 2h -
编写任务1
-
提交任务1 git commit -m ‘任务1 done’
-
编写任务2
-
提交任务2 git commit -m ‘任务2 done’
-
…
-
晚上下班前,都提交上去 git push
-
第二天,继续做需求,还是使用 store-xxx 这个分支
a. 如果这个需求,就你一个人完成,也就是说 这个 store-xxx 分支,是你一个人玩得,就不用更新
b. 如果这个需求,是多个人完成,大家都在 store-xxx 分支上编写代码的话,需要 git pull 一下。 -
编写任务5
-
提交任务5 git commit -m ‘任务5 done’
-
提交合并请求。
六、Git分支合并操作(工作场景)
1.本地操作合并
- 收到同事通知,要将 A 分支 合并到 Master 分支
git status
查看当前工作空间是否干净。干净则往下操作,否则先处理干净git checkout master
切换到需要被合并的合并上 ,Master分支git pull
拉取一下最新的代码git merge origin/A
合并分支,将 A 分支合并到当前所在分支- 可能会出现冲突,如果有冲突就解决
a.
b.git status
查看冲突的文件是什么
c. 找同事,一起来看这个冲突该如何解决
d. 解决完之后,需要重新add commit push
git push
推送到远程。git branch -d A
删除分支。同时通知同事,合并完成,你可以删除本地的分支了。
master a - b
feature-loginlogin a - b - c
wq a - b - d
feature-loginlogin => master
master a - b - c
wq => master a - b - c - d
2.远程操作合并
pull requests
七、合并分支时解决冲突
-
原因
两个分支在同一个代码上的某一个位置做了修改,这些 git 合并时不知道该听那个分支的。
-
解决方案
- 找到有冲突的文件
- 删除这个文件中的特殊标记
- 找到相应的开发人员去商量到底如何处理这个情况,用你的,还是用我的,或者两个都保留
git add
git commit