Удалить измененный файл из запроса на вытягивание

114

На данный момент у меня есть 3 измененных файла (новых файлов) в запросе на перенос.

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

Я пробовал пару вещей (просмотр исходной версии файла и т. Д.), Но он все еще отображается как измененный файл в PR.

Есть ли этому решение?

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

Ответы:

260

Переключитесь на ветку, из которой вы создали запрос на перенос:

$ git checkout pull-request-branch

Замените измененный файл (ы) на файл из другой ветки, считая его главным :

git checkout origin/master -- src/main/java/HelloWorld.java

Зафиксируйте и отправьте на удаленный:

git commit -m "Removed a modified file from pull request"
git push origin pull-request-branch
Арпит Аггарвал
источник
4
Не работает, показывая мне ошибку: pathspec '{file / path.js}' не соответствует ни одному файлу (файлам), известным git.
raftaar1191 02
8
Это рабочее и проверенное решение, просто проверьте свой путь правильно
Паван Т
2
это работает для файлов вокруг файла, над которым я действительно хочу выполнить действие ... так что я не думаю, что это что-то не так с путем
Тим Боланд
1
В случае проблем с ошибкой: pathspec '{file / path.js}' не соответствует ни одному файлу (файлам), известным git. Я получил его, когда пытался сбросить файл, которого не было в ветке origin / master
Дмитрий Малугин
1
@ArpitAggarwal, это нормально работает. Огромное спасибо.
Дэдпул
10

Вы можете изменить фиксацию, а затем выполнить принудительное нажатие, которое обновит ветку с PR.

Вот как я рекомендую вам это сделать:

  1. Закройте PR, чтобы те, кто его просматривает, не вмешались, пока вы не внесете свои изменения.
  2. Выполните мягкий сброс фиксации перед нежелательным изменением (если это последняя фиксация, которую вы можете использовать, git reset --soft HEAD^или если это другая фиксация, вы захотите заменить 'HEAD ^' идентификатором фиксации)
  3. Отменить (или отменить) любые изменения в файле, которые вы не собирались обновлять
  4. Сделайте новую фиксацию git commit -a -c ORIG_HEAD
  5. Принудительно нажмите на ветку
  6. Повторно открыть запрос на извлечение

Теперь, когда ваша ветка обновлена, запрос на слияние будет включать ваши изменения.

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

Кейф Кракен
источник
-5

Запрос на перенос - это всего лишь запрос на слияние одной ветки с другой.

Ваш запрос на перенос ничего не «содержит», это просто маркер, говорящий «пожалуйста, объедините эту ветку с этой».

Набор изменений, которые PR показывает в веб-интерфейсе, - это просто изменения между целевой веткой и вашей функциональной веткой. Чтобы изменить свой запрос на вытягивание, вы должны изменить свою функциональную ветку, возможно, с принудительным нажатием на функциональную ветку.

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

Крис Китчинг
источник