這里有2個分支,master中的test.txt文件內容是master init,branch01中的test.txt文件內容是branch01 init。
1、合並分支遇到沖突
在master上merge branch01,由於master的第一行是master init,branch01的第一行是branch01 init,所以合並時就出現沖突了。
解決方法:修改沖突的test.txt文件,然后git add, git commit, git push
查看提交后的結果,會看到把branch01所有提交的版本都合並到了master上了,解決沖突后的test.txt文件也是對的。
2、版本回退(git reset)遇到的問題
輸入git log,如下圖所示,head表示最新版本。
現在把分支回退到合並前,也就是回退到master init提交的版本,如下圖所示,輸入git reset --hard [commit-id],可以看到當前版本已經回退到了master init提交到那個版本,之前合並到版本已經沒有了
現在把當前本地分支同步到遠程,如下圖所示,使用git push出現推送失敗的情況,因為本地分支的版本低於遠程分支,當然會這樣,我們本來就行回退到之前的分支。注意這里不要使用git pull來更新分支,更新后又是回退前的版本了。使用git push -f強制推送過去,就可以了。強制推送的情況在這里可以使用,一般情況下不推薦使用。
我們再次查看遠程分支,如下圖所示,推送版本只有master init,之前合並后的版本沒有了
3、版本回退后,再重新合並
如下圖所示,使用git merge,若出現沖突就解決,然后git add, git commit, git push就可以了。
可以看到,合並后的分支已經提交上去了
4、版本重做(git revert)
與git reset的區別是:git reset會回退到指定的某一版本,這個版本之后的提交都沒有了;而git revert會生成一個新的版本,只不過這個版本會撤銷指定的某一版本。
如下圖所示,這里有3次提交,每次提交增加一行代碼。
現在重做update 03這個版本,也就是撤銷update 03這個版本的提交,並重新生成一個版本。如下圖所示,輸入git revert -n [commit-id]
結果如下所示,新增了一個版本,這個版本撤銷了udate 03的提交
5、版本重做后再次合並
若重做了合並某分支的提交,重新生成了一個新版本,這個版本的代碼不含這個分支提交的內容。當需要再次合並這個分支時,會出現已經合並的提示,原因是之前已經合並過了,再次合並肯定會給這個提示,合並不成功。但最新代碼確實是沒有這個分支的內容,因為已經重做了。
解決方法:先讓這個分支撤銷(git reset head^)上次的提交,如果合並前有多個提交就都撤銷。然后git add, git commit, git push [-f]重新提交,然后切換到master,重新merge,push就行了。