У меня есть фиксация xyz в моей локальной ветке, которую я хочу проверить, если она включена в репозиторий удаленной версии; могу ли я сделать это несколькими путями? Я мог бы клонировать удаленное репо, но я надеюсь на более хороший и быстрый способ. git ls-remote
казался многообещающим, но не нашел для меня ничего полезного. Спасибо!
Git: проверить фиксацию xyz в удаленном репо?
Ответ 1
Предположим, что удаленный, который ссылается на удаленный репозиторий, называется origin
. В этом случае сначала обновите все ветки удаленного отслеживания с помощью
git fetch origin
Теперь вы можете использовать полезную опцию --contains
для git branch
, чтобы узнать, какая из ветвей удаленных содержит эту фиксацию:
git branch -r --contains xyz
(-r
означает показывать только ветки удаленного отслеживания.) Если commit xyz
содержится в одной или нескольких ветвях удаленного отслеживания, вы увидите вывод, например:
origin/test-suite
origin/HEAD -> origin/master
origin/master
Если он содержится в вашем локальном репозитории, но не является одной из ветвей удаленного отслеживания, выход будет пустым. Однако, если это коммитирование вообще неизвестно в вашем репозитории, вы получите сообщение об ошибке malformed object name
и сообщение об использовании - возможно, немного запутанное, если вы этого не ожидаете...
Ответ 2
Как сказал Марк,
git branch -a --contains commitish
Однако будьте осторожны для ветвей, которые содержат выбранную вишню/переустановленную/объединенную версию коммита.
Это может пригодиться
git log --cherry-pick --left-right <commitish> ^remote/branchname
Он будет отображать фиксацию ТОЛЬКО, если она не существует (как cherrypick) в удаленной ветке. См. Справочную страницу журнала для объяснения того, как -cherry-pick идентифицирует эквивалентные коммиты
Конечно, слияния/пересоздания с разрешениями конфликтов или сквош не могут быть автоматически обнаружены как