最近工作git
管理方面遇到一個疑問,如下:
我有兩個分支dev
和 feature
分支,目前出現以下疑問,
我在feature
分支先執行 git pull origin feature
操作,更新本地的分支到最新,然後執行了git rebase dev
操作,最後執行git push origin feature
時會遇到以下錯誤
To ssh://xxx@git.xxxx.com/project_xx/xxx.git
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to 'ssh://xxx@git.xxxx.com/project_xx/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
最後再執行一次git pull origin feature
操作才能成功,這樣會產生一條merge log,並且內容為空Showing 0 changed files
。
疑問,為什麼我之前已經執行了
pull
更新到最新了?不知道是不是我操作流程的問題,請大牛們指教,謝謝!
問題應該是這樣的:
首先,你的feature分支是遠端分支,你把他rebase後,本地的feature分支就到了dev分支上了,但是feature的遠端追蹤分支origin/feature還是在原來的位置上。然後你這樣push的話git是不允許的,push的時候git會檢查分支的歷史commit,當你當前分支的上一個提交不是遠端分支上最新的提交時,git就會阻止你提交。要求你pull來跟新分支。
還有就是,讓追蹤分支和本地分支分開也許不是個很好的做法。如果你的目的是把追蹤分支也刪除,然後把本地分支的結構同步到遠端的話。你可以先把遠端的feature刪除,
git push origin :feature
這樣本地的追蹤分支也就沒了。然後你在push就可以了。不好意思,重新測試後發現,和我想得完全不同。
的確會出現reject,只能重新pull再push,而且有可能出現conflict。
[從我自己的實驗來看,因為rebase後,origin/feature已經出現了分叉,可以使用git gui查看,原因是rebase會改變commit之間的父子關係]
http://stackoverflow.com/questions/8939977/git-push-rejected-after-fea...