Как увидеть отличия фиксации между ветвями в 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)