Как я вижу различия фиксации между ветвями в git?


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

git checkout master
git log

и

git checkout branch-X
git log

и визуально различают их, но я надеюсь на более простой, менее подверженный ошибкам метод.

8 221

8 ответов:

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

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

вы можете легко сделать это с

git log master..branch-X

это покажет вам фиксации, что ветвь-X имеет, но мастер не делает.

Я думаю, что это вопрос выбора и контекста.Я предпочитаю использовать

git log origin/master..origin/develop --oneline

он будет отображать коммиты в разработке, которые не находятся в главной ветви.

если вы хотите увидеть, какие файлы на самом деле изменены, используйте

git diff --stat origin/master..origin/develop

если вы не укажете аргументы, он отобразит полное различие. Если вы хотите увидеть визуальную разницу, установите meld на linux, или WinMerge на windows. Убедитесь, что они являются диффтулами по умолчанию .Тогда используйте что-нибудь как

git difftool -y origin/master..origin/develop

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

git fetch
git log origin/master..HEAD --oneline

он покажет вам все коммиты, которые будут объединены

если вы находитесь на Linux, gitg это способ сделать это очень быстро и графически.

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

git log --oneline --decorate

сделать git log лучше по умолчанию, я обычно эти глобальные параметры:

git config --global log.decorate true
git config --global log.abbrevCommit true

Я бы предложил следующее, чтобы увидеть разницу "в коммитах". Для симметричной разности повторите команду с инвертированными аргументами:

git cherry -v master [your branch, or HEAD as default]

Если вы хотите использовать gitk:

gitk master..branch-X

у него есть хороший старый школьный графический интерфейс

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

enter image description here

перейти к вашему РЕПО:Insights -> Network

#! /bin/bash
if ((2==$#)); then
  a=
  b=
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

способствуя этому, потому что это позволяет A и B журналы должны быть diff'Ed визуально, бок о бок, если у вас есть визуальный инструмент diff. Заменить команды diff в конце команды запуска визуального средства просмотра различий.