前言:
在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主,分支的版本。