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


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

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

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

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


142


источник


Ответы:


Git не может отправлять такую ​​информацию по сети, как Hg can. Но вы можете запускать 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 ,


96



Начиная с 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}..'

101



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

git diff master origin / master 


42



  1. Используйте "git log origin..HEAD"

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

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


32



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

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

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

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

Вышеприведенное outgoing, Для incoming, просто поменяйте:

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

19



I would do

$ git fetch --dry-run

for hg incoming and

$ git push --dry-run

for hg outgoing.


7



git-out is a script that emulates hg outgoing quite accurately. It parses on "push -n" output, so it produces accurate output if you need to specify additional arguments to push.


1



git incoming

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

git outgoing

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

0