Skip to content

Instantly share code, notes, and snippets.

@aligos
Created September 27, 2019 09:04
Show Gist options
  • Save aligos/baadc7687b9b1c265b22eaf0db7ad41a to your computer and use it in GitHub Desktop.
Save aligos/baadc7687b9b1c265b22eaf0db7ad41a to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# This git hook will prevent merging specific branches into others
# Put this file in your local repo, in the .git/hooks folder
# and make sure it is executable.
# The name of the file *must* be "prepare-commit-msg" for Git to pick it up.
FORBIDDEN_BRANCHES = ["staging"]
def merge?
ARGV[1] == "merge"
end
def merge_msg
@msg ||= `cat .git/MERGE_MSG`
end
def from_branch
@from_branch = merge_msg.match(/Merge branch '(.*?)'/)[1]
end
def current_branch
@current_branch = `git branch | grep '*' | sed 's/* //'`.chop
end
def into_master?
@current_branch == "master"
end
def from_forbidden_branch?
FORBIDDEN_BRANCHES.include?(from_branch)
end
if merge? && from_forbidden_branch?
out = `git reset --merge`
puts
puts " STOP THE PRESSES!"
puts " You are trying to merge #{from_branch} into the *#{current_branch}* branch."
puts " Surely you don't mean that?"
puts
puts " run the following command now to discard your working tree changes:"
puts
puts " git reset --merge"
puts
exit 1
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment