Убедитесь, что в локальном git-репо все зафиксировано и передано мастеру - PullRequest
7 голосов
/ 12 января 2012

У меня есть сценарий оболочки, где я хочу проверить один из моих репозиториев git.Я хочу знать, есть ли в этих репозиториях все совершенные и подталкиваются ли они к мастеру.Перед этим тестом я делаю git fetch, чтобы убедиться, что у меня есть последние изменения.

Я нашел способ проверить, есть ли в репо какие-то незафиксированные изменения:

if ! git --work-tree=$HOME/git/project --git-dir=$HOME/git/project/.git diff-index --quiet HEAD --; then
    echo "Has some changes";
fi

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

Какой самый простой способ сделать это?

Ответы [ 4 ]

8 голосов
/ 12 января 2012

Очень простой способ сделать это - просто позвонить

git push -n

("-n" означает "--dry"-run ", что означает, что вместо того, чтобы делать толчок, вместо этого он скажет вам, что он бы нажал)

Если он говорит" Все в курсе ", то вы уже подтолкнули все кorigin.

Кроме того, он выдаст вам список всех коммитов, которые еще не были отправлены на origin.

Или, если есть изменения в origin, которые вы еще не выполнилизатем он может жаловаться на возможные слияния, которые могут быть вызваны нажатием (это дублирует проверку «есть некоторые изменения», которую вы уже выполняете)

7 голосов
/ 12 января 2012

Вы можете проверить, что все совершено с:

git diff --exit-code && git diff --cached --exit-code

В типичной конфигурации при успешном нажатии на master в origin ветвь удаленного отслеживания origin/master будет обновлена. Итак, чтобы проверить, передали ли вы все свои изменения, вы можете проверить:

git rev-parse --verify master

... совпадает с:

git rev-parse --verify origin/master
1 голос
/ 15 февраля 2017

После git fetch, чтобы проверить, есть ли в вашей ветке локальные коммиты, которые не были перенесены на удаленный, попробуйте следующее:

git diff --exit-code <remote>/<branch>..<branch>

Это также скажет вам, есть ли коммиты впульт, который у вас нет локально.Обратите внимание, что это просто проверка на наличие изменений, поэтому, если бы были разные коммиты с одинаковыми изменениями в удаленной и локальной ветвях, возможно, что эта команда не обнаружит это.В сценарии я обычно перенаправляю это на /dev/null и просто проверяю статус возврата.Итак, если вы используете пульт дистанционного управления origin, а ветвь - master, команда будет выглядеть следующим образом:

git diff --exit-code origin/master..master > /dev/null

Как и предполагали другие, я также использую git diff --exit-code и git diff --cached --exit-code для проверкидля локальных незафиксированных изменений.

0 голосов
/ 06 марта 2012

Из великого ответа Марка Лонгаира я понял, что можно проверить в этом локальном git-репо все зафиксировано и передано, но вам нужно запустить несколько команд для этого.

Я написал небольшой скрипт, который делает все это и пишет по-дружески, что случилось.

$ is_git_synced ~/git/* --only_errors
Error: path '/home/bessarabov/git/Dancer' has staged changes
Error: path '/home/bessarabov/git/Ubic' has some divergences with remote 'origin'

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

Это на Github: https://github.com/bessarabov/App-IsGitSynced и на CPAN: https://metacpan.org/module/App::IsGitSynced

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...