Я выполнил пул-реквест, но после этого я сделал несколько коммитов в проекте локально, что привело к загрязнению моего пул-реквеста, я попытался удалить его, но безуспешно.
Я нашел несколько похожих вопросов в StackOverflow, но не могу применить то, что там есть. Это мой первый пулреквест на GitHub, поэтому мне странно, как все это работает.
Выделенный коммит - это тот коммит, который мне нужно сохранить и удалить все остальное. Это становится четвертым коммитом в истории, потому что я делаю слияние.
Может кто-нибудь объяснить, что происходит и как решить эту проблему?
git
github
pull-request
измученный
источник
источник
what branch
= ветка, над которой вы работаете,onto what branch
= ветка, в которую вы тянете запрос,Ответы:
У вас есть несколько способов сделать это.
Этот пост - прочтите часть об откате , в котором подробно объясняется, что мы хотим сделать и как это сделать.
Вот самое простое решение вашей проблемы:
Команда revert создаст новую фиксацию с отменой исходной фиксации.
источник
Люди не хотели бы видеть неправильную фиксацию и откатную фиксацию, чтобы отменить изменения неправильной фиксации. Это загрязняет историю коммитов.
Вот простой способ удалить неправильную фиксацию вместо отмены изменений с помощью откатной фиксации.
git checkout my-pull-request-branch
git rebase -i HEAD~n
// гдеn
- количество последних коммитов, которые вы хотите включить в интерактивную перебазировку.pick
сdrop
для фиксаций вы хотите отказаться.git push --force
источник
git push origin HEAD:myBranch --force
. Но в остальном здорово и полезно.pick
наdrop
для коммитов, которые вы хотите отменить»?git rebase -i HEAD~<n>
в верхней части файла будут<n>
строки коммитов, каждая из которых содержит текстpick <commit id>
. По умолчанию используется значениеpick
, поэтому для каждого коммита, который вы хотите отбросить, измените текстpick
наdrop
Если вы удаляете коммит и не хотите сохранять его изменения, у @ferit есть хорошее решение.
Если вы хотите добавить этот коммит в текущую ветку, но не имеет смысла быть частью текущего PR, вы можете вместо этого сделать следующее:
git rebase -i HEAD~n
git reset HEAD^ --soft
чтобы отменить фиксацию изменений и вернуть их в поэтапное состояние.git push --force
для обновления удаленной ветки без удаленной фиксации.Теперь вы удалите фиксацию со своего пульта дистанционного управления, но все равно будете иметь локальные изменения.
источник
Итак, сделайте следующее,
Допустим, ваша ветка называется my_branch, и у нее есть дополнительные коммиты.
git checkout -b my_branch_with_extra_commits
(Сохранение этой ветки под другим именем)gitk
(Открывает консоль git)git checkout my_branch
gitk
(Это откроет консоль git)reset branch to here
"git pull --rebase origin branch_name_to _merge_to
git cherry-pick <SHA you copied in step 3. >
Теперь посмотрите историю коммитов локальной ветки и убедитесь, что все в порядке.
источник
Вот что мне помогло:
Создайте новую ветку с существующей. Назовем существующий
branch_old
и новый какbranch_new
.Сбросьте
branch_new
до стабильного состояния, когда у вас вообще не было проблем с фиксацией. Например, чтобы поставить его на уровень местного мастера, сделайте следующее:git reset - жесткий мастер git push - принудительное происхождение
cherry-pick
коммиты изbranch_old
вbranch_new
git push
источник