git的常用命令及工作中冲突问题解决方法
工作中其实用的最多的就是这些命令
git status
查看状态git add -A
将所有文件提交至暂存区git commit -m "信息说明"
将修改文件提交至存储库git push origin dev
将当前分支提交至远程dev分支中git checkout dev
切换至本地dev分支git pull origin dev
将远程dev分支拉取至本地当前分支git rebase dev
解决本地当前分支与本地dev分支中的代码冲突git stash
储存(避免脏提交)git stash pop
改完之后返回继续之前工作git log
查看提交日志git reset --hard "版本号"
版本回退
一、git官网学习网址
二、一台电脑上配置多公钥文件
在git bash
中使用命令ssh-keygen
之后会出现,下图
配置公钥路径
信息填写好了以后,在个人输入的路径(注意一定要写全路径)下就可以看到刚才命令生成的2个文件了
查看公钥文件
之后在公钥文件路径下创建config文件注意该文件没有后缀扩展名,打开config文件作以下配置,有几个公钥就配几个。
新建config文件
config文件配置
后面将不同的.pub后缀公钥文件里的内容添加至不同的远程仓库,这样就可以不同远程仓库拥有不同公钥了。(coding,github,码云等等都可以单独拥有一个公钥文件)
三、常用命令
- 克隆远程仓库,使用命令
git clone 仓库ssh
,如下图
使用git clone克隆远程仓库
- 使用命令
git status
显示被修改文件
显示被修改文件
- 使用命令
git add .
或者git add -A
是将所有修改文件提交至暂存区,命令git add 文件名
是将某个文件添加至暂存区 - 使用命令
git commit -m "本次提交说明信息"
将修改文件提交至存储库 - 使用命令
git push origin master
将当前分支所有本地推送至远程仓库master分支 git简单的一个使用流程示例
简单git的一个步骤
四、工作中的git使用
通常情况下,我们不会将项目提交至master分支,工作中项目经理会在创建一个dev分支
- 使用命令
check out -b dev
本地新建dev分支并切换至dev分支 - 之后使用命令
git branch
即可查看所有本地分支,带*号的分支为当前工作的分支 - 然后使用命令
git push origin dev:dev
将本地dev分支推送至远程dev分支(git push origin 本地分支名:远程分支名)推送以后这样远程仓库就有了dev分支了
本地创建dev分支并推送至远程
- 修改默认分支,工作中一般不会操作master分支,选择新建的dev分支点击确定
点击修改默认分支
选择默认分支
默认分支修改成功 项目经理创好项目以后,接下来开发人员操作如下:
- 首先还是需要在本地,使用命令
git clone ssh
克隆远程仓库至本地,之后cd进入目录默认的分支就是dev分支了 - 克隆好了以后,开发人员不会再dev分支上进行操作,一般会基于dev分支创建一个自己的分支,使用命令
git checkout -b 分支名
image.png
- 将文件内容进行更改,使用命令
git status
查看修改内容
image.png
然后依次使用git add -A
,git commit -m "提示信息"
,git push origin 开发人员分支名
,之后远程仓库就会出现开发人员分支,最后我们点击新建合并请求将其与dev分支合并,当然点击以后可能出现可合并,也可能出现不可合并,不可合并为代码冲突,需要同事之间进行沟通处理
将kayle/user分支推送至远程
远程仓库已有kayle/user分支
可合并示例 不可合并的情况,现在加入我们之前还没有点击合并,但是之前一位同事他已经修改文件了,并且已经合并至dev分支了
同事先行提交至dev分支合并了 这个时候我们点击自己的分支的时候,新建合并请求就会出现不可自动合并,即出现代码冲突
不可自动合并
之后我们使用命令git checkout dev
将本地分支切换至dev分支,使用命令git pull origin dev
将远程dev分支更新至本地,完了以后我们在使用命令git checkout 自己的分支
,在使用命令git rebase dev
将远程dev分支更新至本地dev,并拉取至本地kayle/user分支
image.png
与同事沟通过后,协商保留哪些,之后再次,确认后,在使用git staus
查看文件修改状态,在使用git add -A
,之后使用命令git rebase --continue
,git push origin kayle/user
,这时出现我们自己本地kayle/user分支和远程kayle/user分支代码冲突,我们在将远程kayle/user更新下来,使用命令git pull origin kayle/user
,之后再冲突文件选择保留内容就好,最后在推送至远程
自己本地分支与远程自己分支出现冲突
打开冲突文件
冲突解决完以后,再次将本地分支推送至远程
之后在进入远程仓库,选择自己的分支,即显示可合并,我们在点击新建合并请求
冲突已解决分支显示可合并
之后我们输入标题,点击新建合并请求
进入选择新建合并请求
接下来就是code review过程,添加评审者(一般是项目成员),添加的目的是为了让团队成员也看看代码会不会给项目造成不利的影响,如果都认为没有问题,那么我们点击合并分支进行合并
添加评审者
在文件改动里面可以看到文件修改的地方,红色的是删除的部分,绿色的是新增的部分,点击加号评审者可以对该行代码做出评论
i评审者评论
若有评审者看不懂该行代码,则我们需要进行解释,可以重新再代码中详细写明,然后再次推送至远程仓库,将推送后的链接复制回复至该评审者
image.png
将新增的代码内容发布,稍后链接回复评审者
评论回复链接
当所有人觉得都没有问题的时候,就选中删除源分支,点击合并请求
合并分支
合并以后在代码里面,提交历史里面,分支就合并在dev分支里面了
代码历史里提交分支已合并
- iOS如何实现多个环境一次打包
- 从原理到策略算法再到架构产品看推荐系统 | 附Spark实践案例
- MobX 在 React Native开发中的应用
- RCTEventEmitter使用
- Google V8 引擎
- 揭秘前端字符的戏精之路
- 跨语言嵌入模型的调查
- React Native如何消除启动时白屏
- 如何在Python中将TimeDistributed层用于Long Short-Term Memory Networks
- react native 调用原生UI组件
- Android侧滑删除另一种实现,SwipeListView补充
- React Native调用原生组件
- React Native调用原生UI组件
- js不好学并不是因为它难,而是因为它容易混淆
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-CupertinoFullscreenDialogTransition篇
- mapper.xml相关语法
- Flutter基础widgets教程-CupertinoNavigationBar篇
- Hive排序函数
- Flutter基础widgets教程-CupertinoPageScaffold篇
- 前后端分离开发跨域问题
- Python 常用的工具包(后期继续完善)
- Flutter基础widgets教程-CupertinoSlider篇
- Python学习笔记(五) requets多种请求参数
- java实现多个网络文件批量下载并压缩
- Python学习笔记(四) 爬取网站数据(静态,动态)
- java整合FastDFS文件服务器
- Flutter基础widgets教程-CupertinoSwitch篇
- XmlRootElement的作用和用法
- 获取指定月份的所有工作日(工作日为自定义的)