文档章节

git 实践之冲突管理

-鹏
 -鹏
发布于 2017/08/04 14:13
字数 920
阅读 56
收藏 0

冲突的类型和原因   

  当两个人在同一个文件的同一行做了修改,或者当一个人将一个文件删除,恰好另外一个人试图修改这个文件的时候就会发生冲突。 也就是说冲突产生的条件是同一文件,并且如果不设计删除文件的情况下,冲突的条件可以缩小到 同一文件同一行。

如何较少冲突

知道冲突产生的原因和类型了,我们可以考虑下,怎么才能减少冲突呢?

1. 根据功能划分feature分支 

开发功能,分功能开发的时候。要根据功能划分不同的分支。 比如要开发两个功能,一个是功能A,一个是功能B。 那么我们需要checkout 两个分支  分别是 feat/A  和 feat/B 。 这样的好处是只需要最终上线的时候合并一次,解决一次冲突即可。

2. 组件和模块划分粒度。

如果组件和模块划分粒度比较大,大家修改同一个组件或者同一个模块代码的可能性就会降低,因此冲突概率会下降。

3. 开发之前的沟通

动手开发之前,要先理清思路。 比如开发的影响范围有多大,大概要怎么去做。不仅可以降低开发中遇到大问题返工的风险,而且在一定程度上降低了冲突的可能。

处理冲突的正确步骤:

如果是更改了同一行代码:

# 切换到需要处理冲突的目录
cd ~./your-project

# 查看冲突文件
git status

# 编辑器中打开,大家也可以设置git merge tool 为自己喜欢的编辑器
# 比如 git merge.tool xxxxx
code filename1.js
or
git mergetool


# 大家会看到下面的这种的,就是冲突的地方
其他功能代码
<<<<<<< HEAD
功能A代码  // 这中间的是当前工作区的代码
=======
功能B代码  // 这中间的是合并的分支代码
>>>>>>> feat/B // 这个是具体合并的分支名字

# 这个时候,需要叫上开发功能B的人,一起来帮助你解决冲突
# 保留一方或者保留双方

# 解决完成后
git add . 
git commit -m 'Resolved merge conflict by incorporating both features'

如果是尝试修改删除了的文件:

# 切换到需要处理冲突的目录
cd ~./your-project

# 查看冲突文件
git status

# 将文件加回来(谁让你删了??)
git add README.md
git commit -m 'Resolved merge conflict by keeping README.md file.'

# 将文件删除(谁让你改了??)
git rm README.md
git commit -m 'Resolved merge conflict by removing README.md file.'

 

心态也很重要

你应该始终牢记,你可以在任何时间执行撤销操作,并返回到你开始合并之前的状态。要对自己有信心,你不会破坏项目中的任何东西。只要在命令行界面中键入 “git merge --abort” 命令,你的合并操作就会被安全的撤销。

当你解决完冲突,并且在合并完成后发现一个错误,你仍然还是有机会来简单地撤销它。你只须要键入 “git reset --hard ” 命令,系统就会回滚到那个合并开始前的状态,然后重新开始吧!

© 著作权归作者所有

共有 人打赏支持
上一篇: e2e
下一篇: 破解软件
-鹏

-鹏

粉丝 20
博文 155
码字总数 92388
作品 0
杭州
前端工程师
私信 提问
git使用实践

这篇文章将从开发者和管理者两方面介绍如何使用git进行团队合作开发。 1.git 和svn的差异 git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式。如果不习惯用代码管理工具...

Jason-ZH
2013/11/24
264
0
VSCode 中使用Git实践,学会了效率翻倍

项目组突然将SVN代码全部迁到GIT上,一直在网上看到说VSCode对git支持不错,使用方便。但是没有找到较好的中文文档。看了下官方的英文文档,自己整理了一下使用vs code做git开发实践。 需要的...

MirroZhou
05/19
0
0
git关于文件权限修改引起的冲突及忽略文件权限的办法

在发布项目到线上时,很多时候需要修改文件的权限,如果是使用git版本管理软件来发布的话,那么下次更新线上文件的时候就会提示文件冲突。明明文件没有修改,为什么会冲突呢?原来git把文件权...

Surjur
2015/04/15
0
0
(项目管理 进阶篇)Git 团队版本管理 原则与思路

说起来在来到公司之前一直没有好好用 Git 来管理分支. 之前练习的时候有用到 Git, 但是也仅限于本地仓库的提交而已, 这样做更多的只是留下一个可供追寻的路径 ( History ), 没有太多的 职能....

zhiqiangw
2016/10/06
10
0
Git中代码冲突的解决方式

使用Git管理代码,在进行代码提交的时候,如果出现了冲突该怎么办呢,下面就两种常见的冲突给出了解决方法,希望对大家有所帮助。 冲突1: 当你commit以后,在执行git pull --rebase的时候出...

长平狐
2013/12/25
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部