Skip to content
This repository

Mar 20, 2012

  1. Christopher Tiwald

    push: Provide situational hints for non-fast-forward errors

    Pushing a non-fast-forward update to a remote repository will result in
    an error, but the hint text doesn't provide the correct resolution in
    every case. Give better resolution advice in three push scenarios:
    
    1) If you push your current branch and it triggers a non-fast-forward
    error, you should merge remote changes with 'git pull' before pushing
    again.
    
    2) If you push to a shared repository others push to, and your local
    tracking branches are not kept up to date, the 'matching refs' default
    will generate non-fast-forward errors on outdated branches. If this is
    your workflow, the 'matching refs' default is not for you. Consider
    setting the 'push.default' configuration variable to 'current' or
    'upstream' to ensure only your current branch is pushed.
    
    3) If you explicitly specify a ref that is not your current branch or
    push matching branches with ':', you will generate a non-fast-forward
    error if any pushed branch tip is out of date. You should checkout the
    offending branch and merge remote changes before pushing again.
    
    Teach transport.c to recognize these scenarios and configure push.c
    to hint for them. If 'git push's default behavior changes or we
    discover more scenarios, extension is easy. Standardize on the
    advice API and add three new advice variables, 'pushNonFFCurrent',
    'pushNonFFDefault', and 'pushNonFFMatching'. Setting any of these
    to 'false' will disable their affiliated advice. Setting
    'pushNonFastForward' to false will disable all three, thus preserving the
    config option for users who already set it, but guaranteeing new
    users won't disable push advice accidentally.
    
    Based-on-patch-by: Junio C Hamano <gitster@pobox.com>
    Signed-off-by: Christopher Tiwald <christiwald@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ctiwald authored gitster committed
Something went wrong with that request. Please try again.