前言:
在VS 2019有git 的可视化管理,但,感觉微软其实就是在git上包了一层。版本冲突后,还是要靠git 的命令行代码搞。本文记录了一次,branch和master的版本合并的过程。作为,后续的参考。
【注意,这个是一个本地版本的例子】
1 版本情况:
1 查看本地版本:
git status
确认在分支版本上,
可以用
git log
看一下,现在是在HEAD -> Branch.... 分支上面,
分支版本的情况,并确认分支版本的版本ID,cbef9b7b6eb8658ee7a96f12c61c5957e99316e1
1.1 看主支版本:
git log master
并获取,准备合并的主支版本的ID , 71ee9e4af6a7e2052281a114b73396fb1f2dde5b
2 CHECK OUT 主支版本:
git checkout master
提示从分支到主支版本的改变,
用git log 确认一下,主支版本情况
确认我们在主支版本上了,
然后, 最好用
git reflog
查一下所有,支的版本,主,分支,包括,已经删除的支的版本,
3 Merge
选定上面显示的分支版本ID,进行Merge
$ git merge cbef9b7
Performing inexact rename detection: 100% (585/585), done.
Performing inexact rename detection: 100% (595/595), done.
。。。。。。
CONFLICT (content): Merge conflict in AAMED.dir/Debug/AAMED.log
Automatic merge failed; fix conflicts and then commit the result.
【发现冲突文件】
注意,执行后,在主支上,命令行会显示,你现在是正在合并版本的状态:蓝色的字体,MERGING
4 解决冲突:为了标识颜色的信息,这里截图:
4.1 很乱的各种冲突信息:
【案】其实我们只需要解决绿框里面两个源码冲突,其他的都不是我们要的。
4.2 先把关系的变更给交到提交列表:
在红区的两个CPP文件,是我们真正要提交的源码:
我们先在编码的VS 2019IDE里面打开这两个文件:会发现,GIT已经自动将Master 和 Branch的版本比较,冲突标记加到对应的源码的上下文里面了:
<<<<<<< HEAD
这是主分支中的内容 (Master)
=======
这是要合并的分支中的内容 (Branch)
>>>>>>>
要合并的分支
由于我们是把Branch Merge 到 Master,
所以,Master的原来的东西,要被Branch给替换掉,也就是
这段信息的意义:
<<<<<<< HEAD
这是主分支中的内容 (Master) 这里面的内容要被替换掉
=======
这是要合并的分支中的内容 (Branch) 这里面的内容要保留
>>>>>>>
不过,具体也要看你的应用情况,你需要自己做出判断,反正,要决定哪些保留,哪些删除,然后,去掉
<<<<<<< HEAD
=======
>>>>>>>
这些辅助线,你的源码就改完了,可以存一下。
然后,我们要做的,就是把解决好的冲突的文件,加到要提交的列表里面:
git add
$ git add src/main.cpp
$ git add src/FLED_drawAndWriteFunctions.cpp
加好后,用git status 看一下,是否在绿区:
OK ,在绿区了,但是,绿区有一堆,我都不想管的文件log啥的,要去掉,
现在要去掉不行进行版本管理的文件,有两个步骤:
步骤1 ,如果要长久的去掉这个文件,以后都不要管了:
那要通过在.gitignore
文件中添加相应,在项目的版本控制路径下面,就是当前你操作的目录路径即可:
vim .gitignore
就可以打开相关的配置文件了,然后,想屏蔽哪个文件,哪类文件,直接写在里面的规则来实现
# 例如,所有的log文件
*.log
# 例如,目录Debug
/Debug# 忽略所有文件
*
# 但不忽略.cpp文件
!*.cpp
# 也不忽略.gitignore和README.md文件
!.gitignore
!README.md
步骤2 ,就是当前的绿区的文件:
用命令:
git reset
比如,绿区也就是等待提交区,有一堆tlog的文件:
我们执行,
$ git reset HEAD *.tlog
再用git log查看,就有:
这样tlog的文件都去掉,然后,类似的方法去掉所有的绿区不需要提交的文件。
现在绿区OK了,但是,红区还有文件
先处理: Unmerged paths 文件:
“both modified”意味着在当前分支和要合并的分支中对这些文件都有修改,并且这些冲突还没有被解决。
而且,由于这些文件已经进入和红区(也就是暂存区)(staged)了
通过上面的.gitignore 文件,已经来不及了git reset HEAD
我们通过,上面的命令来取消这些暂存区的文件,红区文件
git reset HEAD -- AAMED.dir/Debug/*.obj
执行后,我们看到Staged的红区文件里面obj的文件就被拿掉了,
同样方法,我们拿到所有我们不想进行版本控制的,已经进入暂存区的文件:
接下来,我们来处理,连staged都没进去的问题
Changes not staged for commit:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .gitignore
modified: AAMED.dir/Debug/AAMED.log
modified: AAMED.sln
modified: AAMEDemo.dir/Debug/AAMEDemo.Build.CppClean.log
modified: AAMEDemo.dir/Debug/AAMEDemo.ilk
modified: AAMEDemo.dir/Debug/AAMEDemo.log
modified: AAMEDemo.dir/Debug/AAMEDemo.tlog/CL.command.1.tlog
modified: AAMEDemo.dir/Debug/AAMEDemo.tlog/CL.read.1.tlog
modified: AAMEDemo.dir/Debug/AAMEDemo.tlog/CL.write.1.tlog
modified: AAMEDemo.dir/Debug/AAMEDemo.tlog/link.read.1.tlog
modified: AAMEDemo.dir/Debug/AAMEDemo.tlog/link.write.1.tlog
modified: AAMEDemo.dir/Debug/Contours.obj
modified: AAMEDemo.dir/Debug/EllipseNonMaximumSuppression.obj
modified: AAMEDemo.dir/Debug/FLED.obj
modified: AAMEDemo.dir/Debug/FLED_Initialization.obj
modified: AAMEDemo.dir/Debug/FLED_PrivateFunctions.obj
modified: AAMEDemo.dir/Debug/FLED_drawAndWriteFunctions.obj
modified: AAMEDemo.dir/Debug/Group.obj
modified: AAMEDemo.dir/Debug/LinkMatrix.obj
modified: AAMEDemo.dir/Debug/Node_FC.obj
modified: AAMEDemo.dir/Debug/Segmentation.obj
modified: AAMEDemo.dir/Debug/Validation.obj
modified: AAMEDemo.dir/Debug/adaptApproxPolyDP.obj
modified: AAMEDemo.dir/Debug/adaptApproximateContours.obj
modified: AAMEDemo.dir/Debug/main.obj
modified: AAMEDemo.dir/Debug/vc142.pdb
modified: ALL_BUILD.vcxproj
用下面的命令来处理:
git restore
例如,去掉 AAMEDemo.dir/ 下的所有的文件
$ git restore AAMEDemo.dir/*.*
最暴力的方法是:全部都不管了啊
$ git restore *
现在就剩下:
Untracked files:
这是本来就没有版本控制的文件,我们可以不理他就好了。这样,提交的暂存区(绿区)就剩下我们要提交的文件了。
5 提交:
利用以下命令:
git commit
然后,可以加上注解,例如:
$ git commit -m "now we merge the master and branch toghter before modify for EXE merge into C#"
git status
我们看到,已经回到master,然后,该处理的文件都处理好了,就剩下本来没有加入版本管理的文件:
6 最后,看版本merge的情况
用git log命令,这时候,可以看到master和branch的情况,这样就完成了版本的合并工作:
最后,我们看一下VS 2019的git中的结果:
在VS 2019的git IDE的窗口里面
现在可以看到branch和master主,分支的版本。