Как получить git для отображения изменений AB, где A и B - ветки - PullRequest
0 голосов
/ 17 июня 2020

Как произвести разницу между двумя ветвями A, B как AB (в смысле множеств). Я не хочу, чтобы отображались дополнительные изменения в B.

У меня есть две ветки функций, например A и B. Раньше я объединил A с B. Но я не уверен, сколько из A находится в B. В B есть дополнительные изменения, которых нет в A. Также в недавнем прошлом те же изменения, которые добавлялись к A и B как отдельные коммиты, а не выбор из A в B. что A и B имеют отдельные коммиты слияния из ветки master. Я хочу увидеть, какая часть A отсутствует в B по мере изменений.

Мне удалось получить AB в формате коммитов, показывая те коммиты, которые находятся в A, но отсутствуют в B.

git log --no-merges B..A

Но это не очень помогает, когда A и B имеют одинаковые изменения с разными фиксациями. Хочу Я хочу - это AB в формате разницы изменений в A, которых нет в B.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете войти в одну ветку, затем объединить другую, а затем «отменить фиксацию» всего, что отличается:

git checkout A --detach # in case you don't want to spoil branch A
git merge B
git reset --soft B

Это удобно, потому что вы можете открывать файлы в IDE, и он будет выделять " изменил "строки". И вы сможете при необходимости менять их. В отличие от обычных различий, которые имеют статус c и могут быть просмотрены только в окне различий.

0 голосов
/ 17 июня 2020

Я не уверен на 100%, что понимаю, что из следующего вы ищете:

git diff B A

даст вам патч, который вам понадобится для замены B на содержимое A;

git diff B...A

# same as :
git diff $(git merge-base A B) A

даст вам различия между «базой слияния B и A» и A.


[править] А, возможно, вы ищете git log --cherry:

$ git log --oneline --cherry B...A
= 52d74472c (HEAD -> A) update the thrusters
+ ca5649304 balance the hull   # commits tagged with "+" are not present on B
= 507c0acea fix the airlock    # commits tagged with "=" are also present on B

Обратите внимание, что здесь сравниваются коммиты на основе патча, который они вводят; если по какой-то причине патч не совсем одинаковый, два коммита будут считаться разными.
Это указывает на коммиты, которые git rebase или git cherry-pick сохранят.

git log --cherry-mark B...A отобразит оба списка для A и B, помеченные + и =, чтобы указать «оригинал» и «присутствует в другой ветви».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...