首頁  >  問答  >  主體

git rebase遇到的一個疑問

最近工作git管理方面遇到一個疑問,如下:
我有兩個分支devfeature 分支,目前出現以下疑問,
我在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更新到最新了?不知道是不是我操作流程的問題,請大牛們指教,謝謝!

仅有的幸福仅有的幸福2727 天前550

全部回覆(2)我來回復

  • 世界只因有你

    世界只因有你2017-05-02 09:21:29

    問題應該是這樣的:
    首先,你的feature分支是遠端分支,你把他rebase後,本地的feature分支就到了dev分支上了,但是feature的遠端追蹤分支origin/feature還是在原來的位置上。然後你這樣push的話git是不允許的,push的時候git會檢查分支的歷史commit,當你當前分支的上一個提交不是遠端分支上最新的提交時,git就會阻止你提交。要求你pull來跟新分支。
    還有就是,讓追蹤分支和本地分支分開也許不是個很好的做法。如果你的目的是把追蹤分支也刪除,然後把本地分支的結構同步到遠端的話。你可以先把遠端的feature刪除,git push origin :feature這樣本地的追蹤分支也就沒了。然後你在push就可以了。

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-02 09:21:29

    不好意思,重新測試後發現,和我想得完全不同。
    的確會出現reject,只能重新pull再push,而且有可能出現conflict。
    [從我自己的實驗來看,因為rebase後,origin/feature已經出現了分叉,可以使用git gui查看,原因是rebase會改變commit之間的父子關係]

    • 建議只進行本地branch進行rebase

    http://stackoverflow.com/questions/8939977/git-push-rejected-after-fea...

    回覆
    0
  • 取消回覆