1. 問題場景
本人使用公司的開發(fā)機Mac, 發(fā)現(xiàn)在Mac 機上pull代碼時總會出現(xiàn)“fatal: Not possible to fast-forward, aborting”。
開發(fā)流程:基于release拉取一個feature分支,然后在feature分支上進行開發(fā),再把feature分支往master合并,如果有沖突先git pull 一下,然后解決沖突進行push。?
(release是master的子集)
上述流程在windows上運行很流暢但是到mac上就不行,在stackoverflow的大佬說是因為base不一致,需要使用rebase去解決,百度上也是這么描述的。雖然這種方式幫助很多人解決了問題,但絕不是我所想要的解決方式。因為我想使用git pull后即使有沖突而不是以這樣的方式顯示。
2.問題解決
合并代碼的方式有很多中:git merge,git rebase,git pull等
git 在處理文件merge時,會分成三種處理方式
- –ff–only fast forward模式,快速合并 有沖突就會失敗
- –no–ff 非快速合并 會生成一次commit
- –squash 將合并后的不同分支所有的提交記錄作為一次提交
fase-forward只要存在沖突就會失敗, 我們得配置git pull
-
git config pull.rebase false —- 關閉 rebase
-
git config pull.rebase true —–開啟rebase
-
git config pull.ff only/false —–開啟/關閉 fast-forward
?上述命令是針對當前分支的,如果使用全局配置的請加上--global, 如下
-
git config --global pull.rebase false —– 全局關閉 rebase
-
git config --global pull.rebase true —– 全局開啟rebase
-
git config --global pull.ff only/false —– 全局開啟/關閉 fast-forward
其實我們要做的是關閉rebase和fast-forward在pull中的表現(xiàn),可運行如下代碼解決當前分支問題:
git config pull.rebase false
git config pull.ff false
可運行如下代碼解決全局問題:
git config --global pull.rebase false
git config --global --add pull.ff false
還有另外一種解決方式,感覺不是很科學,好像也能解決問題。如下:
git pull {branchName} –no-rebase?eg: git pull origin release –no-rebase
實際上不僅是pull可以配置,merge也是可以使用同樣的方式進行配置
最后提供一張圖,簡單易懂講述了git 的rebase操作(由于當時截圖,忘記拷貝鏈接了)
這里糾正一下,rebase后X,Y,Z均會產生新的commit。文章來源:http://www.zghlxwxcb.cn/news/detail-403946.html
最后根據(jù)小編的經歷,建議大家不要使用rebase去合并代碼。使用git pull/git merge/git fetch即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-403946.html
到了這里,關于Git pull報 fatal: Not possible to fast-forward, aborting的解決辦法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!