Как протолкнуть ветку, только если она отличается от основной?

Цель

Я хотел бы подтолкнуть ветку, только если она отличается от местного мастера. Более конкретно, я не хочу выдвигать ветку, если она указывает на тот же коммит, что и на локальный мастер.

Фон

В моей компании есть сотни репозиториев git, и мы не используем подмодули git, поэтому для очистки всей системы у меня есть очень простой скрипт bash:

for gitdir in `find ./ -name .git|sort`;
    do 
        workdir=${gitdir%/*}; 
        cd $workdir
        eval "$*"
        cd $BASE_DIR
    done

что я бегу так:

./for_each_repo.sh 'git checkout -b <bname> && <some command> && git commit -m <message>''

Тогда я могу внести некоторые другие изменения в репозитории.

Наконец я бегу:

./for_each_repo.sh 'git push origin <bname>'

Но его, очевидно ..., толкает также "пустые" ветви (то есть, где я только что создал ветку, но не зафиксировал ее).

Всего 1 ответ


Первый,

git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads

перечислил бы все ветви с новыми коммитами (которые еще не объединены в master ).

Затем вы можете связать это с вашей командой push

git push origin $(git for-each-ref --no-merged=master --format='%(refname:short)' refs/heads)

Есть идеи?

10000