在開發中,一般會保持兩個分支master分支和develop分支,可是若是由於develop上面迭代太多而沒有及時維護master,最後想丟棄master而直接將測試確認過的develop強推到master,該怎麼操做呢?javascript
網上搜了一下,可是真正本身使用起來卻又暴露出各類問題。所以,作以下總結分享,但願對遇到一樣問題的人用幫助。java
網上查找了一個操做步驟,以下:git
git checkout develop
git pull
git push origin develop:master -f
git checkout master
git reset --hard develop
git push origin master --force
或使用下面的命令,將當前分支推送到遠程的同名分支。測試
git push origin HEAD
針對上面的步驟,若是你使用的sourcetree管理的GitHub代碼,恭喜你,你成功中招了,場景一和場景二在沒有修改同一個文件的狀況下,上面的五部曲一點問題沒有。可是,凡是就怕可是。fetch
若是你對同一個文件進行過維護而致使差別,即使不是同一個代碼,都會致使問題產生。分析後發現,問題點主要在步驟4上面,當本地的舊分支master的a.txt文件與最新的遠端分支master的a.txt有衝突,須要你手動去判斷須要merge操做。spa
這在不多的文件與不多的修改點的狀況下,可能你還很好判斷,可是若是文件數量龐大,且修改點因時間久遠忘記了的狀況下,可能我就只能說呵呵了。這也就沒有達到標題所說的強制合併的效果。code
在知道了上面問題的癥結後,我將上面的步驟作了修正,以下:blog
git checkout develop git pull
git push origin develop:master -f
git checkout master
git fetch --all
git reset --hard origin/master
再執行上面的場景三和場景四,順利執行完,切換到sourcetree上面,也不會再提示有競合須要手動merge的操做,也沒有須要你push和pull的東西,完美。ip
分析上面的操做,雖然核心操做是步驟2,由於通過步驟2,遠端的master已經被你用develop強制替換了,目的是達到了,你徹底能夠在本地另起一個路徑再clone一份master進行管理。開發
可是,在通過了改良後的操做後,你徹底能夠不丟棄已經使用很習慣了的路徑,何樂而不爲呢。
再說改良後的修正點核心思想:就是獲取遠端的GitHub文件信息,而不作合併,而後直接丟棄本地舊的代碼,直接獲取遠端分支的代碼覆蓋到本地,OK,問題解決,但願對你們有用。