Использование Git как найти изменения между локальными и удаленными
Вот два разных вопроса, но я думаю, что они связаны.
-
При использовании Git, как мне найти, какие изменения я совершил локально, но еще не нажал на удаленную ветку? Я ищу что-то похожее на команду Mercurial hg outgoing
.
-
При использовании Git, как мне найти, что изменилось для удаленной ветки до выполнения pull? Я ищу что-то похожее на команду Mercurial hg incoming
.
Для второго: есть ли способ увидеть, что доступно, а затем вишня - выбрать изменения, которые я хочу вытащить?
Ответы
Ответ 1
Git не может отправлять такую информацию по сети, например Hg. Но вы можете запустить git fetch
(что больше похоже на hg pull
than 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.
Ответ 2
Начиная с Git 1.7.0, имеется специальный синтаксис, который позволяет вам в общем случае ссылаться на ветвь вверх: @{u}
или @{upstream}
.
Чтобы подражать hg incoming
:
git log [email protected]{u}
Чтобы подражать hg outgoing
:
git log @{u}..
Я использую следующие псевдонимы incoming
и outgoing
, чтобы упростить их использование:
git config --global alias.incoming '!git remote update -p; git log [email protected]{u}'
git config --global alias.outgoing 'log @{u}..'
Ответ 3
Не полный ответ, но git fetch вытащит удаленное репо, а не слияние.
Затем вы можете сделать
git diff master origin/master
Ответ 4
-
Используйте "git log origin..HEAD"
-
Используйте "git fetch", а затем "git log HEAD..origin". Вы можете выбрать индивидуальные фиксации вишни, используя перечисленные идентификаторы фиксации.
Вышеприведенное предполагает, конечно, что "origin" - это название вашей ветки удаленной отслеживания (которая есть, если вы использовали клон с настройками по умолчанию).
Ответ 5
Также это, для сравнения всех ветвей:
git log --branches --not --remotes=origin
Вот что говорит об этом man man git:
Показывает все фиксации, которые находятся в любом из локальных веток, но не в удаленные ветки отслеживания для происхождения (что у вас есть это происхождение, не).
Вышеприведенный для outgoing
.
Для incoming
просто замените:
git log --remotes=origin --not --branches
Ответ 6
Я бы сделал
$ git fetch --dry-run
для hg incoming
и
$ git push --dry-run
для hg outgoing
.
Ответ 7
git -out - это script, который довольно точно эмулирует hg outgoing
. Он анализирует вывод "push -n", поэтому он дает точный результат, если вам нужно указать дополнительные аргументы для нажатия.
Ответ 8
git входящий
$ 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
Ответ 9
Когда ответы "git log" и @{u} изначально дали мне ошибки "неизвестной версии", я опробовал предложение Chris/romkyns git push --dry-run
.
Вы получите такой результат, как "5905..4878 master- > master". 5905 - это последняя фиксация, которую удаленный пульт имеет и передает через (4848), который будет применен к удаленному устройству.
Затем вы можете использовать 5905..4878 в качестве аргументов для нескольких других команд git, чтобы получить более подробную информацию:
git diff 5905..4878 # Gives full code changes in diff style
git log --online 5905..4878 # Displays each commit comment
Ответ 10
Когда вы выполняете git fetch, все содержимое, включая ветки, теги (refs) временно сохраняются в .git/FETCH_HEAD, содержимое которых можно просмотреть с помощью команды:
git журнал FETCH_HEAD
Если вы не используете суффикс -a с git fetch, то по умолчанию содержимое FETCH_HEAD будет перезаписано новым содержимым.
Из этого содержимого вы можете просмотреть и решить, к какой ветке вы хотите объединить их, если вы это сделаете, или вы можете просто выбрать вишневый выбор, если хотите только несколько коммитов из того, что было принесено с помощью fetch.