git沖突的解決與版本回退遇到的問題


這里有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就行了。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM