Is there a way to configure git repository to reject 'git push –force'?

I was wondering is there a way to prevent ‘git push --force‘ on a repository (only on master branch)?

Assume I have remote git repository and do:

  • Exclude a single commit from a “git diff”
  • How to get the latest tag name in current branch in Git?
  • Wikis with VCS backends?
  • Why are there .sln, .suo and .csproj files?
  • Can a git repository be corrupted if a command modifying it crashes or is aborted?
  • Only push current branch in SourceTree
    • git push‘ to ‘master’. It works.
    • git push --force‘ to ‘branch-1’. It works.
    • git push --force‘ to ‘master’. It is rejected.

    Is it even possible?

    Thanks for any answers and suggestions.

    BR,
    Dawid.

  • Force remove cached
  • Configure Git With Existing Keys
  • Git has forgotten the remote repository I fetch from / push to
  • Correctly committing versioned, and built (minified) files to GitHub with Gulp.js
  • GitHub:Enterprise post-receive hook
  • Switching branches without touching the working tree?
  • 2 Solutions collect form web for “Is there a way to configure git repository to reject 'git push –force'?”

    Setting the configuration variables:

    receive.denyNonFastForwards
    receive.denyDeletes
    

    will prevent any ‘forced’ pushes from working across all branches.

    If you want finer pre-branch control then you will have to use a ‘hook’ on the remote repository, probably the ‘update’ hook.

    There is a sample update hook called ‘update-paranoid’ that probably does what you need (and more) in the git distribution in the ‘contrib’ folder.

    gitweb link

    I wrote this quick update hook to prevent non-fast-forward updates (pushes) on the “dev” branch in a repository:

    #!/bin/sh
    
    REFNAME=$1
    OLDSHA=$2
    NEWSHA=$3
    
    if [ "refs/heads/dev" != $REFNAME ]; then
      exit 0
    fi
    
    MERGEBASE=$(git merge-base $OLDSHA $NEWSHA)
    if [ $OLDSHA = $MERGEBASE ]; then
      exit 0
    fi
    
    echo "Not a fast-forward on branch dev"
    exit 1
    
    Git Baby is a git and github fan, let's start git clone.