Не показывает никакой фиксации, когда она уже отменена?

#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:

Здесь необходимо понимать две концепции.

  1. Во время слияния git сравнивает хэши коммитов в истории обеих ветвей, чтобы определить, какие коммиты следует объединить.
  2. git revert отменяет предыдущий коммит, создавая новый коммит. Обратитесь к документу Git Revert . Предыдущий коммит не будет удален из истории.

Ниже приведено текущее состояние вашей ветки разработки.

 c1 -- c2 -- merge commit -- revert commit
           / 
    c3 -- c4 

c3, c4 - commits that contain the feature branch changes 
  

Если вы попытаетесь объединить ветку функций сейчас, поскольку фиксация c4 уже находится в истории разработки, git не предпримет никаких действий.

Это можно решить следующими способами. По этой ссылке есть подробное обсуждение этого сценария.

Создайте исправление и повторно примените изменения

  1. В вашей ветке функций запустите git log , чтобы определить, с какого коммита изменения необходимо объединить в ветку разработки. (В нашем примере это был c3).
  2. Создайте патч. Выполнить, git format-patch <commit> <folder where patch file will be saved>
  3. Теперь объедините ветку разработки с вашей веткой функций. git merge origin/develop . Это также отменит ваши изменения в ветке функций.
  4. Повторно примените исправления, git apply --index <patch file> .
  5. Не забудьте внести дополнительные изменения, которые изначально были неверными. Зафиксируйте и нажмите.

Отменить фиксацию возврата

Как упоминал @Lasse, вы можете отменить фиксацию возврата. Лучше внести эти изменения в ветку функций, а затем поднять PR для ветки разработки.

  1. Объединить разработку с веткой функций
  2. git revert <revert commit>
  3. Внесите необходимые исправления, зафиксируйте и внесите изменения.

Перебазируйте свою ветку функций

Это наименее предпочтительный вариант, поскольку он переписывает историю ветвей функций. Вы можете запустить git rebase -i <since commit> и просто изменить сообщение первого коммита, который вы хотите объединить. Это создаст новые текущие и последующие хэши коммитов и позволит вам объединить их для разработки. Но есть 2 проблемы.

  1. В вашем PR будут конфликты слияния для всех ваших изменений. Лучше объединить ветку разработки с функцией локально, разрешить конфликты и нажать.
  2. Вам нужно принудительно нажать, так как вы будете переписывать историю удаленной ветки функций