ChatGPT解决这个技术问题 Extra ChatGPT

Find unmerged Git branches?

I have a Git repository with many branches, some of them already merged and some not. Since the number of branches is quite large, how can I determine which branches have not yet been merged? I would like to avoid having to do an "octopus" merge and re-merging branches that have already been merged.

First I was laughing about the term of the "octopus merge". But in case you didn't know, like me: That's the official name of a merge strategy :-) See git-scm.com/docs/git-merge or atlassian.com/de/git/tutorials/using-branches/merge-strategy

A
Amber

Try this:

git branch --merged master

It does what it says on the tin (lists branches which have been merged into master). You can also pull up the inverse with:

git branch --no-merged master

If you don't specify master, e.g...

git branch --merged

then it will show you branches which have been merged into the current HEAD (so if you're on master, it's equivalent to the first command; if you're on foo, it's equivalent to git branch --merged foo).

You can also compare upstream branches by specifying the -r flag and a ref to check against, which can be local or remote:

git branch -r --no-merged origin/master

If you merge foo into master, it will appear in the git branch --merged master list. But what happens if you commit once more to foo? Does it no longer appear in that list, or does it, as even though it has new commits, it was at one point merged into master?
@CraigOtis It will no longer appear in the list. --merged only lists branches that are completely merged into the given branch.
Imagine this... a git answer that's easy to understand and use!
Is there a way to get the list without checking out the branch? Like pointing to the server and then get the list?
As I found, the git branch --no-merged master shows only my local branches. It doesn't show any branch that was not checked out on my computer and created by someone else.
o
observer

You can also use the -r parameter to show remote branches that were not merged into master:

git branch -r --merged master

git branch -r --no-merged

                         

or -a to see both remote and local at the same time
Should that last one be git branch -r --no-merged master ?
A
Adam Dymitruk

If a branch is merged already, merging it again won't do anything. So you don't have to be worried about "re-merging" branches that are already merged.

To answer your question, you can simply issue

 git branch --merged

to see the merged branches or

 git branch --no-merged

to see the unmerged branches. Your current branch is implied but you can specify other branches if you wish.

 git branch --no-merged integration

will show you branches that are not yet merged into integration branch.


m
moldcraft

The below script will find all origin/* branches that are ahead of current branch

#!/bin/bash

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)

echo -e "Current branch: \e[94m$CURRENT_BRANCH\e[0m"
echo ''

git branch -a | grep remotes/origin/ | while read LINE
do
    CMD="git diff --shortstat remotes/origin/${CURRENT_BRANCH}...${LINE}"

    if $CMD | grep ' file' > /dev/null; then
        echo -e "\e[93m$LINE\e[0m" | sed 's/remotes\/origin\///'
        $CMD
        echo ''
    fi
done

The up-to-date version of the script


Link is dead.....