У меня есть старая ветка, которую я хотел бы удалить. Однако, прежде чем сделать это, я хочу проверить, что все коммиты, сделанные в эту ветку, в какой-то момент были объединены в какую-то другую ветку. Таким образом, я хотел бы видеть все коммиты, сделанные в моей текущей ветке, которые не были применены ни к какой другой ветке [или, если это невозможно без некоторых сценариев, как можно увидеть все коммиты в одной ветке, которые не были применены? в другую данную ветку?].
git
branch
git-branch
sircolinton
источник
источник
Ответы:
Вы, вероятно, просто хотите
Это выведет список всех веток, которые содержат коммиты от "branch-to-delete". Если он сообщает больше, чем просто «ветвь для удаления», ветвь была объединена.
Ваши альтернативы на самом деле просто синтаксис rev-list. например
git log one-branch..another-branch
показывает все чтоone-branch
нужно чтобы всеanother-branch
было.Возможно, вам также будет интересно
git show-branch
узнать, что и где.источник
git branch --contains some-branch
только возвращаетсяsome-branch
, то она возвращает что-то, но она не была объединена.git log foo..bar
будут показаны коммиты между последним баром и последним foo, но не будут зафиксированы другие коммиты, отсутствующие в более отдаленном времени Чтобы увидеть все в баре, но не в foo, вы должны использовать решение @ jimmyorr.Чтобы увидеть список коммитов в одной ветви, но не в другой, используйте git log:
... то есть показать логи коммитов для всех коммитов на oldbranch, которые не на newbranch. Вы можете перечислить несколько веток для включения и исключения, например,
Примечание: в Windows
^
это escape-ключ, поэтому его нужно экранировать другим^
:источник
^
в качестве префикса меня смутило. В этом контексте это означает исключить эту ветвь. Использование^
в качестве суффикса будет относительной ссылкой на родительский коммит этой ветви.gitk oldbranch ^newbranch --no-merges
(протестировано с git 1.8.1.1). Дополнительное примечание, для меня^
означает включающий HEAD коммит ветвиnewbranch
.Чтобы показать коммиты в oldbranch, но не в newbranch:
Чтобы показать разницу по этим коммитам (обратите внимание, что есть три точки):
Вот документ с иллюстрацией диаграммы https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
источник
newbranch
илиoldbranch
, мы можем сделатьgit log ..oldbranch
илиgit log newbranch..
соответственно..
между именами судей. Я также использовал--cherry-pick
опцию, чтобы скрыть коммиты, которые присутствуют в обеих ветвях, но имеют разные хэши, потому что они выбирались из одной ветви в другую.Для тех, кто все еще ищет простой ответ, проверьте git cherry . Он сравнивает фактические различия вместо хешей коммитов. Это означает, что он принимает коммиты, которые были выбраны или перебраны вишней.
Сначала оформите ветку, которую хотите удалить:
git checkout [branch-to-delete]
затем используйте git cherry, чтобы сравнить его с вашей основной веткой разработки:
git cherry -v master
Пример вывода:
Примечание.
-v
Флаг должен включать сообщение о фиксации вместе с хешем SHA.Строки с '+' находятся в ветви для удаления, но не в главной ветви. Те, у кого впереди символ «-», имеют эквивалентный коммит в master.
Для просто коммитов, которых нет в master, объедините вишневый кир с grep:
git cherry -v master | grep "^\+"
Пример вывода:
источник
diff
утилиту unix для сравнения различных файлов. Или вы можете создать временную ветку и раздавить все коммиты в том же порядке, что вы делали с оригинальной веткой, а затем использовать это, что, я думаю, будет работать.Хотя некоторые ответы, опубликованные здесь, помогут найти то, что вы ищете, следующая подкоманда git branch - более подходящее решение для вашей задачи.
--merged используется для поиска всех ветвей, которые можно безопасно удалить, поскольку эти ветви полностью содержатся в HEAD.
В то время как в
master
одном можно запустить команду для перечисления ветвей, которые можно безопасно удалить, например, так:источник
Ответ jimmyorr не работает на Windows. это помогает использовать
--not
вместо^
так:источник
^
поддерживается на Windows, но нужно экранировать, что, в Windows, есть (другой)^
:git log oldbranch ^^newbranch --no-merges
.Если вам нужно проверить одну (одну) ветку, например, если вы хотите, чтобы эта ветка 'B' была полностью объединена с веткой 'A', вы можете просто сделать следующее:
git branch -d <branchname>
имеет безопасность: «Ветвь должна быть полностью объединена в ГОЛОВУ».Внимание : это фактически удаляет ветвь B, если она объединена с A.
источник
Вы можете использовать этот простой скрипт, чтобы увидеть коммиты, которые не объединены
Вы также можете использовать инструмент git-wtf, который будет отображать состояние веток
источник
Просто используйте,
git cherry
чтобы выбрать все коммиты в веткеnewFeature42
например:git cherry -v master newFeature42
источник
Начните создавать запрос на извлечение помощью используемого вами хостинга git. Если ветвь полностью объединена с базовой веткой, вы не сможете создать новый PR.
Вам не нужно на самом деле сделать запрос на извлечение, просто используйте первый шаг, где вы выбираете ветви.
Например, на GitHub:
Это не использует git в командной строке, но я часто нахожу полезным использовать другие инструменты в вашем распоряжении с четкой мысленной моделью, а не пытаться запомнить другую загадочную команду git.
источник