#git #github
#git #github
Вопрос:
Я объединил PR в develop
ветке, но возникла проблема при постановке, поэтому я вернулся со следующей командой:
git revert -m1 <commit>
а затем git push
в develop
ветке
Когда я создаю PR на Github для объединения ветки функций develop
, он не показывает никаких коммитов / кода в PR, даже если я отменил коммит слияния в ветке разработки.
В чем проблема и как ее решить?
Комментарии:
1. Какую связь ветвь функций имеет с фиксацией слияния и возврата? Я спрашиваю, потому что не совсем понятно, почему вы ожидали, что PR будет содержать какие-либо изменения. Вы сказали, что отменили слияние, а затем отправили его в разработку, что вы сделали в ветке функций, можете ли вы описать, что там произошло, что заставило вас ожидать, что PR покажет изменения?
2. Я не вносил никаких изменений в ветку функций после отмены фиксации слияния в ветке разработки. Теперь я хочу вернуть его в разработку, но я ожидал увидеть коммит в PR? Он показывает пустой код на PR.
3. Если в вашей ветке функций нет коммитов, то объединять нечего. Если вы хотите вернуть изменения от слияния обратно в разработку, проще всего, вероятно, отменить возврат.
Ответ №1:
Здесь необходимо понимать две концепции.
- Во время слияния git сравнивает хэши коммитов в истории обеих ветвей, чтобы определить, какие коммиты следует объединить.
git revert
отменяет предыдущий коммит, создавая новый коммит. Обратитесь к документу Git Revert . Предыдущий коммит не будет удален из истории.
Ниже приведено текущее состояние вашей ветки разработки.
c1 -- c2 -- merge commit -- revert commit
/
c3 -- c4
c3, c4 - commits that contain the feature branch changes
Если вы попытаетесь объединить ветку функций сейчас, поскольку фиксация c4 уже находится в истории разработки, git не предпримет никаких действий.
Это можно решить следующими способами. По этой ссылке есть подробное обсуждение этого сценария.
Создайте исправление и повторно примените изменения
- В вашей ветке функций запустите
git log
, чтобы определить, с какого коммита изменения необходимо объединить в ветку разработки. (В нашем примере это был c3). - Создайте патч. Выполнить,
git format-patch <commit> <folder where patch file will be saved>
- Теперь объедините ветку разработки с вашей веткой функций.
git merge origin/develop
. Это также отменит ваши изменения в ветке функций. - Повторно примените исправления,
git apply --index <patch file>
. - Не забудьте внести дополнительные изменения, которые изначально были неверными. Зафиксируйте и нажмите.
Отменить фиксацию возврата
Как упоминал @Lasse, вы можете отменить фиксацию возврата. Лучше внести эти изменения в ветку функций, а затем поднять PR для ветки разработки.
- Объединить разработку с веткой функций
git revert <revert commit>
- Внесите необходимые исправления, зафиксируйте и внесите изменения.
Перебазируйте свою ветку функций
Это наименее предпочтительный вариант, поскольку он переписывает историю ветвей функций. Вы можете запустить git rebase -i <since commit>
и просто изменить сообщение первого коммита, который вы хотите объединить. Это создаст новые текущие и последующие хэши коммитов и позволит вам объединить их для разработки. Но есть 2 проблемы.
- В вашем PR будут конфликты слияния для всех ваших изменений. Лучше объединить ветку разработки с функцией локально, разрешить конфликты и нажать.
- Вам нужно принудительно нажать, так как вы будете переписывать историю удаленной ветки функций