Как найти коммиты, выдвинутые без запроса на извлечение? - PullRequest
3 голосов
/ 09 мая 2019

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

Можно ли найти коммиты, которые были перенаправлены непосредственно в master, без запроса на извлечение?

Ответы [ 5 ]

0 голосов
/ 21 мая 2019

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

Github хранит запросы на извлечение как ссылки, так что вы можете перечислить их с помощью git ls-remote u://r/l refs/pull/*/head, пытаясь найти эквивалент в обслуживании Атлассиана, который напоминает плавание в сале, так что вы можете сами это выяснить.

Для репозиториев, использующих соглашение Github для публикации запросов на получение, что-то вроде

awk  'ARGIND==1    { prhead[$1]=1; next}
      !prhead[$3]  { print $0, "was not merged from a pull request" }' \
        <(git ls-remote u://r/l refs/pull/*/head)
        <(git rev-list --first-parent --merges master --parents)

сделает это.

Вы можете (что неудивительно) подтолкнуть все, что настроено для репо, так что до того, как ваши ограничения вступили в силу, кто-то мог подтолкнуть перемотку вперед. Они будут отображаться как коммиты без слияния на мастере:

git rev-list --first-parent --no-merges master

выведет список всех коммитов, которые были сделаны на мастере и не объединены.

0 голосов
/ 09 мая 2019

Какую стратегию слияния вы используете в своем проекте? перебазировать или объединить стратегию? Вы сохраняете ?

0 голосов
/ 09 мая 2019

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

git diff master..yourbranch

для просмотра всех различий между вашей веткой и мастером.

0 голосов
/ 09 мая 2019

Этот эквивалент для удаления всех коммитов с мастера, которые принадлежат PR.Чтобы удалить коммиты PR из master, я могу сказать, что ручной метод, не очень продуктивный, но может быть в порядке:

1) сделать временную копию из ветви master для работы на

git checkout -b master-sandbox

2) найти все хеши коммитов PR (вы можете найти их в Интернете, например, по запросам PR на bitbucket и скопировать их)

3) удалить коммиты на основе хеша из master-sandbox

git rebase -i HEAD~1000

где HEAD ~ 1000 означает последний, например, 1000 коммитов, или используйте хэш коммитов, из которого вы хотели бы сделать экзамен, например: git rebase -i <hash>.Откроется редактор со списком коммитов.Найдите выше собранные коммиты и удалите их.Остальные коммиты - это те, которые не принадлежат PRПовторите это со всеми PR, и оставшиеся коммиты являются непосредственно зафиксированными.

0 голосов
/ 09 мая 2019

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

...