Использование Git как найти изменения между локальным и удаленным



здесь есть два разных вопроса, но я думаю, что они связаны.




  1. при использовании Git, как я могу найти, какие изменения я совершил локально, но еще не нажал на удаленную ветку? Я ищу что-то похожее на Mercurial command hg outgoing.


  2. при использовании Git, как я могу найти, какие изменения имеет удаленная ветвь до выполнения вытягивания? Я ищу что-то похожее на команду ртутный hg incoming.



для второго: есть ли способ увидеть, что доступно, а затем вишневый выбор изменений, которые я хочу вытащить?

666   10  

10 ответов:

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 для имитации hg incoming/outgoing. Вы можете найти их по адресу http://github.com/ddollar/git-utils.

начиная с Git 1.7.0, существует специальный синтаксис, который позволяет вам в общем виде ссылаться на ветку вверх по течению:@{u} или @{upstream}.

передразнить hg incoming:

git log ..@{u}

передразнить hg outgoing:

git log @{u}..

Я использую следующие incoming и outgoing псевдонимы, чтобы сделать выше проще в использовании:

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'

не полный ответ, но git fetch будет тянуть удаленно и не слить. Затем вы можете сделать

git diff master origin/master
  1. используйте " git log origin..Голова"

  2. используйте "git fetch", а затем " git log HEAD..происхождение." Вы можете выбрать отдельные коммиты, используя перечисленные идентификаторы коммитов.

вышеизложенное предполагает, конечно, что "origin" - это имя вашей ветви удаленного отслеживания (что это, если вы использовали clone с параметрами по умолчанию).

есть также это, для сравнения всех ветвей:

git log --branches --not --remotes=origin

вот что говорит об этом страница git log man:

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

выше для outgoing. Ибо incoming, просто поменять:

git log --remotes=origin --not --branches

Я бы сделал

$ git fetch --dry-run

на hg incoming и

$ git push --dry-run

на hg outgoing.

git-out - это скрипт, который эмулирует hg outgoing довольно точно. Он анализирует на выходе "push-n", поэтому он производит точный вывод, если вам нужно указать дополнительные аргументы для push.

git incoming

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

git исходящий

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch

когда в "журнале Git" и @{у} ответы изначально дал мне "неизвестная редакция" ошибки, я пробовал Крис/предложения от romkyns git push --dry-run.

вы получите такой вывод, как " 5905..4878 мастер->мастер". 5905-это последняя фиксация, которую имеет пульт дистанционного управления, и фиксация через (и включая) 4878 будет применена к удаленному устройству.

затем вы можете использовать 5905..4878 в качестве аргументов для нескольких других команд git, чтобы получить более подробную информацию:

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment

когда вы делаете git fetch, все содержимое,включая ветви, теги ( ссылки) временно сохраняются .git/FETCH_HEAD, содержимое которого можно просмотреть с помощью команды: ГИТ FETCH_HEAD журнала Если вы не используете суффикс-a с git fetch, то по умолчанию содержимое FETCH_HEAD будет перезаписано новым содержимым. Из этого содержимого вы можете просмотреть и решить, в какую ветвь вы хотите объединить их, если вы это сделаете, или вы можете просто выбрать вишню, если вы хотите только несколько коммитов из того, что было принесено привести.

Comments

    Ничего не найдено.