/ it-stuff

使用git rebase解决push rejected non-fast-forward问题

我用了git很久了以后才开始接触rebase这个命令,想必git初学者一般都不太熟悉rebase,网上关于rebase的介绍以及和merge的对比的文章一搜便是,这里就不重复了。这篇就介绍一下git rebase的一个简单有用的实例。

在团队使用git开发过程中,不小心会遇到这种情况,push自己的代码前忘记先pull一下了。这样在push时候会遇到类似一个这样的错误:

! [rejected]              branch -> branch (non-fast-forward)
error: failed to push some refs to …
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.

而根据错误提示再进行pull的时候,还是报错:

! [rejected]              branch -> branch (non-fast-forward)

解决这个问题的方法有很多种,在网上也能搜索出很多相关内容,这是挺常见的问题。个人觉得这个时候使用rebase,可以很完美得解决这个问题。这可以说是rebase命令的经典用例。

具体命令如下:

  • 先拿一下远端代码库

    git fetch origin
  • 然后对远端代码库进行rebase,相当于弥补之前遗漏的pull操作

    git rebase origin/YOUR_BRANCH_NAME
  • 最后重新push

    git push -u origin YOUR_BRANCH_NAME:YOUR_BRANCH_NAME