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

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

git checkout master
git log

а затем a

git checkout branch-X
git log

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

Ответ 1

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

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

Ответ 2

Вы можете легко сделать это с помощью

git log master..branch-X

Это покажет, что вы совершили транзакции, которые имеет ветвь-X, но мастер не делает.

Ответ 3

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

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

Он покажет коммиты в разработке, которые не находятся в основной ветке.

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

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

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

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

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

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

Он покажет вам все коммиты, которые собираются объединить

Ответ 4

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

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

git log --oneline --decorate

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

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

Ответ 5

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

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

Ответ 6

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

gitk master..branch-X

у него есть хорошая старая школа GUi

Ответ 7

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

введите описание изображения здесь

Перейдите к своему репо: Insights -> Network

Ответ 8

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

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

Ответ 9

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

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

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

или вы можете сравнить свой текущий с мастером

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

git fetch вам использовать обновленную информацию.

Таким образом, каждый коммит будет в строке, и вы можете скопировать/вставить его в текстовый редактор и начать сравнивать задачи с коммитами, которые будут объединены.

Ответ 10

Если вы хотите сравнить на основе сообщений фиксации, вы можете сделать следующее:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)