Подтвердить что ты не робот

Запрос GitHub pull, показывающий фиксации, которые уже находятся в целевой ветке

Я пытаюсь просмотреть запрос на перенос на GitHub на ветку, которая не является мастером. Целевая ветвь находилась за мастером, и запрос на тягу показал, что он совершает капитан, поэтому я объединил мастер и нажал его на GitHub, но коммиты и diff для них все еще появляются в запросе на вытягивание после обновления. Я удвоил проверку, что ветка на GitHub имеет фиксации от мастера. Почему они все еще появляются в запросе на растяжение?

Я также проверил запрос на перенос локально, и он показывает только не объединенные коммиты.

4b9b3361

Ответ 1

Похоже, что Pull Request не отслеживает изменения в целевой ветки (я связался со службой поддержки GitHub и получил ответ 18 ноября 2014 года, в котором говорилось, что это сделано специально).

Однако вы можете получить обновленные изменения, выполнив следующие действия:

http://githuburl/org/repo/compare/targetbranch...currentbranch

При необходимости замените githuburl, org, repo, targetbranch и currentbranch.

Или, как указал hexsprite в своем ответе, вы также можете принудительно обновить его, щелкнув Edit на PR и временно изменив базу на другую ветку и вернувшись обратно. Это производит предупреждение:

Вы уверены, что хотите сменить базу?

Некоторые коммиты из старой базовой ветки могут быть удалены из временной шкалы, а старые комментарии к обзору могут устареть.

И оставим две записи журнала в пиаре:

enter image description here

Ответ 2

Вот хорошее обходное решение. Используйте кнопку Edit при просмотре PR в GitHub, чтобы изменить базовую ветвь на нечто, отличное от master. Затем верните его в master, и теперь он будет корректно показывать только изменения от последних коммитов.

Ответ 3

Подводя итог, GitHub автоматически не обновляет историю фиксации в запросах на pull. Самые простые решения:

Решение 1: Rebase

Предположим, что вы хотите объединиться в master из feature-01:

git fetch origin
git checkout feature-01
git rebase origin/master
git push --force

Если вы работаете с вилкой, вам может потребоваться заменить origin выше на upstream. См. Как обновить разветвленный репозиторий GitHub?, чтобы узнать больше о отслеживании удаленных веток исходного репозитория.

Решение 2. Создайте новый запрос на растяжение

Предположим, что вы хотите объединить intro master с feature-01:

git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased

Теперь откройте запрос на растяжение для feature-01-rebased и закройте его для feature-01.

Ответ 4

Один из способов исправить это - git rebase targetbranch в этом PR. Тогда git push --force targetbranch, тогда Гитуб покажет правые коммиты и diff. Будьте осторожны с этим, если вы не знаете, что делаете. Возможно, сначала проверьте тестовую ветвь, чтобы сделать rebase, затем git diff targetbranch, чтобы убедиться, что это все еще то, что вы хотите.

Ответ 5

Для всех, кто сталкивается с этим и смущает поведение GitHub Pull Request, первопричина заключается в том, что PR - это различие наконечника ветки источника с общим предком ветки источника и ветвью цели. Поэтому он будет показывать все изменения в ветки источника до общего предка и не будет учитывать любые изменения, которые могли произойти в целевой ветке.

Дополнительная информация доступна здесь: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

Общие различия на основе предков кажутся опасными. Я хочу, чтобы у GitHub была возможность сделать более стандартный трехсторонний PR файл слияния.

Ответ 6

Вам нужно добавить следующее в ваш файл ~/.gitconfig:

[rebase]
    autosquash = true

Это автоматически достигнет того же, что и этот ответ.

Я получил это отсюда.

Ответ 7

Это происходит с GitHub, когда вы фиксируете коммиты из целевой ветки.

Я использовал сквош и слияние с Github в качестве стратегии слияния по умолчанию, включая слияния из целевой ветки. Это вводит новый коммит, и GitHub не распознает, что этот сжатый коммит такой же, как тот, который уже есть в master (но с разными хэшами). Git обрабатывает его правильно, но вы снова видите все изменения в GitHub, что делает его неудобным для просмотра. Решение состоит в том, чтобы сделать регулярное слияние этих извлеченных коммитов вверх по потоку вместо сквоша и слияния. Если вы хотите объединить другую ветку с вашей зависимостью, git merge --squash и git merge --squash этот единственный коммит перед извлечением из мастера, как только другая ветвь фактически сделает его мастером.

Ответ 8

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

git pull --rebase

Это приведет к извлечению и объединению изменений из исходной ветки основного репо (если вы указали на это)

Затем вы решительно нажимаете свои изменения на свой клонированный репозиторий (целевой) github

git push -f origin master

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

Ответ 9

Отказоустойчивый подход, если вы слишком беспокоитесь о том, чтобы что-то испортить: перейдите к файлу и вручную удалите изменения, а затем раздавите последний коммит, используя

git add .  && git commit -a --allow-empty-message -m '' && git reset --soft HEAD~2 &&
git commit --edit -m"$(git log --format=%B --reverse [email protected]{1})"

У меня нет конфликтов, тебе хорошо идти!