Вот два разных вопроса, но я думаю, что они связаны.
При использовании Git как узнать, какие изменения я зафиксировал локально, но еще не отправил в удаленную ветку? Я ищу что-то похожее на команду Mercurial
hg outgoing
.Когда я использую Git, как мне найти изменения, которые произошла в удаленной ветке перед выполнением проверки? Я ищу что-то похожее на команду Mercurial
hg incoming
.
Для второго: есть ли способ увидеть, что доступно, а затем выбрать те изменения, которые я хочу вытащить?
hg incoming
и наhg outgoing
самом деле делать. Ближайший эквивалент Git, который я нашел - это--dry-run
опция. Простоgit pull --dry-run
и вы увидите список всех вещей, которые должны произойти.Ответы:
Git не может отправлять такую информацию по сети, как Hg может. Но вы можете запустить
git fetch
(который больше похож ,hg pull
чемhg fetch
) , чтобы получать новые коммиты из удаленных серверов.Итак, если у вас есть ветвь с именем
master
и удаленнаяorigin
, после запускаgit fetch
вы должны также вызвать веткуorigin/master
. Вы можете получитьgit log
из всех фиксаций , чтоmaster
должно быть надмножествомorigin/master
делаяgit log master..origin/master
. Обратить эти два, чтобы получить противоположное.Мой друг, Дэвид Доллар, создал пару скриптов git shell для симуляции
hg incoming/outgoing
. Вы можете найти их на http://github.com/ddollar/git-utils .источник
Начиная с Git 1.7.0, существует специальный синтаксис, который позволяет вам в общем случае ссылаться на ветку upstream:
@{u}
или@{upstream}
.Чтобы подражать
hg incoming
:Чтобы подражать
hg outgoing
:Я использую следующее
incoming
иoutgoing
псевдонимы, чтобы упростить использование вышеуказанного:источник
git branch --set-upstream foo origin/foo
.git log @{u}..
перечисляет каждое изменение в репо для меня. Там нет, как они еще не существуют.git rev-parse --symbolic-full-name @{u}
печатает соответствующий удаленный справочник. Кроме того,git log @{u}..
показаны коммиты, которые недоступны ветке upstream, которая может включать в себя коммиты, которые уже находятся в удаленном репозитории (если они достижимы по другой ссылке). Это произойдет сразу после того, как вы слились в уже выдвинутой ветке.checkout <somebranch>
иmerge <otherbranch>
. В этот момент я сделалlog @{u}..
и увидел все изменения в списке.Не полный ответ, но git fetch извлечет удаленное хранилище и не сделает слияние. Затем вы можете сделать
источник
git diff origin/master master
Используйте "git log origin..HEAD"
Используйте "git fetch", а затем "git log HEAD..origin". Вы можете выбрать отдельные коммиты с помощью перечисленных идентификаторов коммитов.
Вышеприведенное предполагает, конечно, что «origin» - это имя вашей удаленной ветви отслеживания (как, если вы использовали клон с параметрами по умолчанию).
источник
Также есть, для сравнения всех веток:
Вот что говорит об этом man-страница git log:
Выше для
outgoing
. Дляincoming
, только свопа:источник
я бы сделал
для
hg incoming
идля
hg outgoing
.источник
Git-Out - это скрипт, который
hg outgoing
очень точно имитирует . Он анализирует вывод "push -n", поэтому он производит точный вывод, если вам нужно указать дополнительные аргументы для push.источник
мерзавец входящий
мерзавец исходящий
источник
Когда ответы "git log" и @ {u} первоначально выдавали мне ошибки "неизвестной ревизии", я опробовал предложение Chris / romkyns о
git push --dry-run
.Вы получите вывод, такой как «5905..4878 master-> master». 5905 - это последний коммит, который удаленный имеет и фиксирует через (и включая) 4878, который будет применен к удаленному.
Затем вы можете использовать 5905..4878 в качестве аргументов нескольких других команд git для получения более подробной информации:
источник
Когда вы выполняете git fetch, все содержимое, включая ветви, теги (ссылки), временно сохраняются в .git / FETCH_HEAD, содержимое которого можно просмотреть с помощью команды: git log FETCH_HEAD Если вы не используете суффикс -a с git fetch, тогда по умолчанию , Содержимое FETCH_HEAD будет перезаписано новым содержимым. Из этого содержимого вы можете просмотреть и решить, в какую ветку вы хотите объединить их, если вы это сделаете, или вы можете просто выбрать вишню, если вы хотите всего несколько коммитов из того, что было получено извлечением.
источник