Merge and delete branch in one step/command

50,826

Solution 1

No, git doesn't support this at the same time.

However, you can run the commands in a shell conditionally:

git merge source-branch && git branch -d source-branch

Edit:

-d will only remove merged branches while -D will also remove unmerged branches, so -d will ensure that the branch is merged and you don't delete a branch by accident.

Solution 2

This is an old question, but for those who stumble upon it looking for this functionality, you can now add a Git alias to accomplish this. For example, in .gitconfig:

# ...

[alias]
  mgd = "!git mg $1 && git br -d $1; #"

Then, you could run git mgd branch-name to merge and delete a branch in one go. Note that the lowercase -d flag ensures that the branch will only be deleted if it has already been fully merged; thus, you don't have to worry about the first command not working correctly and then losing the branch.

The exclamation point at the beginning of the alias signifies that this is a bash command, and $1 stores the argument that the user passed in (i.e. the name of the branch to merge/delete).

NOTE: Do not forget the comment character (#) at the end of the alias! It will not work without it.

Solution 3

I will write a script.

git branch | grep -v master | xargs git merge &&
git branch | grep -v master | xargs git branch -d

Here the branch name master can be replaced by your current branch name.

Don't forget the &&. If the first line fails then the second is not executed.

Share:
50,826

Related videos on Youtube

BendEg
Author by

BendEg

Dlr/IronPython projects Simplic-Dlr SOreadytohelp

Updated on July 09, 2022

Comments

  • BendEg
    BendEg almost 2 years

    Is it possible, to merge a branch and automatically delete it with a single command? The delete step should only be executed if merging was successful.

  • Calimo
    Calimo over 5 years
    For me -d refuses to merge branches not merged in origin so I also need to do: git push --delete origin source-branch before I an apply this solution.
  • A. Rick
    A. Rick over 3 years
    Wouldn't the expansion of "git mgd branch-name" result in !git git mg branch-name && git br -d branch-name; #
  • Jacob Lockard
    Jacob Lockard over 3 years
    @A.Rick Actually, no, because the exclamation point signifies that the alias should be run as a bash command. Thus, only the command is run, without git prefixed.
  • Roland Puntaier
    Roland Puntaier over 2 years
    git push origin --delete source-branch to also delete on origin.