Deploying to heroku with git keeps getting rejected due to fast-forwards

12,878

Solution 1

Just force the commit every time you push and it will push it even if there are fast-forward commits. We do this in our development Heroku server all the time since we're all pushing different commits (some further behind than others).

git push -f [email protected]:picasso-staging.git

I don't use jammit for deploying, but you could probably get away with force pushing first and then running the jammit task second. Or check and see if jammit supports a force push flag of some sort.

Solution 2

git push -f REMOTE BRANCH:master #or just master

Force it! Replace REMOTE with your heroku remote name (git remote -v to view all remotes). Replace BRANCH with the branch you want to push or just put "master" for the master branch.

Solution 3

The problem is that changes have already been pushed and your commit is behind those newer pushes. I'm going to assume you have a master branch and your feature branch still, let's say it's called my_feature. You can do this and be okay:

git checkout master
git pull
git checkout my_feature
git rebase master
    (you may have to fix some conflicts here, if any are found)
git checkout master
git merge my_feature
git push heroku

You should remember to run any tests you have to make sure everything's good still.

Share:
12,878
AnApprentice
Author by

AnApprentice

working on Matter, a new way to gather professional feedback.

Updated on June 07, 2022

Comments

  • AnApprentice
    AnApprentice about 2 years

    I keep getting the following fail with heroku + git...

    $ heroku jammit:deploy --app XXXXXXXXXXX
    ===== Compiling assets...[OK]
    ===== Commiting assets...[OK]
    ===== Done...
    ===== Deploying assets for xxxxx-staging to heroku...
    To [email protected]:XXXXXXXX.git
     ! [rejected]        master -> master (non-fast-forward)
    error: failed to push some refs to '[email protected]:xxx-staging.git'
    To prevent you from losing history, non-fast-forward updates were rejected
    Merge the remote changes (e.g. 'git pull') before pushing again.  See the
    'Note about fast-forwards' section of 'git push --help' for details.
    [FAIL]
    ===== Done...
    ===== Deleting compiled assets...[OK]
    ===== Commiting deleted assets...[OK]
    ===== Done...
    $ git pull
    Already up-to-date.
    

    Any ideas what I'm doing wrong or should be doing differently to allow for pushing without having to force a push?

    Thanks