下面是一个具体示例:
首先,本地写好了代码,刚git commit
完,working tree is clean ,想要推送到远端,需要先pull下来处理冲突,再push.
执行git pull
后发现有几个文件提示Merge conflict in **
,说明存在冲突无法自动合并,需要到相应的文件里手动处理冲突
git pull
完后立即执行git status
,可以发现,蓝色的(master |MERGING),merging表示正在合并的状态,需要手动处理完冲突后再git add
和git commit
后,merging就会消失,表示合并完成。
同时可以看到提示中Unmerged paths:
里有红色字体显示的几个文件,就是需要手动处理冲突的文件
然后开始手动处理冲突,比如第一个extern_variable.cpp,打开后如下
三条线划分了两个部分,就是存在冲突的代码,一个是pull之前本地的代码,一个是远端的代码。
<<<<<<< HEAD
QByteArray port0_data;//串口收到的所有数据,用于保存文件
QByteArray port1_data;//串口收到的所有数据,用于保存文件
QByteArray port2_data;//串口收到的所有数据,用于保存文件
Self_defined_protocol self_defined_protocol[3];//自定义解析协议对象
HexProtocolAnalysis hex_analysis;//十六进制解析对象
QString loadFilePath;
=======
Self_defined_protocol self_defined_protocol;//自定义解析协议对象
QString loadFilePath; // 要加载的回放文件路径
QList<int> positionList;
int allDataPacket;
>>>>>>> 5284fb4fdbf2bc3c3dc0638a765144013a45b577
如下,根据自己的需求修改好后,同时把那三条提示线给删掉,就处理好了一个文件的冲突
#include "extern_variable.h"
QSerialPort com_port0;//串口对象
QSerialPort com_port1;//串口对象
QSerialPort com_port2;//串口对象
QByteArray port0_data;//串口收到的所有数据,用于保存文件
QByteArray port1_data;//串口收到的所有数据,用于保存文件
QByteArray port2_data;//串口收到的所有数据,用于保存文件
Self_defined_protocol self_defined_protocol[3];//自定义解析协议对象
HexProtocolAnalysis hex_analysis;//十六进制解析对象
QString loadFilePath; // 要加载的回放文件路径
QList<int> positionList;
int allDataPacket;
之后可以git add extern_variable.cpp
,再 git status 会发现红色的文件中没有了刚才的extern_variable.cpp,即add后就表示已经合并好了。
同样的,再打开mainwindow.ui处理冲突,由于Qtcreator默认锁定编辑ui文件,可以用notepad++打开进行编辑:
处理完同样可以add 这个文件,也可等其他文件处理完一起add.
最后当所有冲突都处理完后,也add 完后,可以git commit
了。commit之后,蓝色的merging标识也没了,就表示合并完成了。
然后这期间如果远端代码没有被其他人更新过的话,就可以git push
推送到远端了。
可以看到,因为在本地处理好了冲突,可以很顺利地推送到远端