當要push代碼到git時,出現提示:
$ git push origin master
To ../remote/
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '../remote/'
問題分析:別人上傳到遠程倉庫后,你沒有及時的同步(、拉取)到本地,但是你同時又添加了一些內容(提交),以致於你在提交時,它會檢測到你之前從遠程倉庫拉取的時候的倉庫狀態和現在的不一樣。於是,它為了安全起見拒絕了你的提交(然后就報了這個錯誤)。
問題解決:
(1)先把git的東西fetch到你本地然后merge后再push
$ git fetch origin master
$ git merge origin FETCH_HEAD
先抓取遠程倉庫的更新到本地,然后與你的本地倉庫合並,(如果有沖突就要解決沖突后再合並,沖突問題比較復雜,這里就不詳細說了),這樣就可以使遠程倉庫和你本地倉庫一致了,然后就可以提交修改了。
(2)這2句命令等價於
$ git pull origin master
但是使用git fetch + git merge 更加安全。
(3)重定基
git pull --rebase origin master
重定基,可以是歷史更加統一,即使提交歷史趨向於一條直線。
補充:他們之間的關系
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD