Избегайте нежелательных слияний и других коммитов при выполнении запроса на подачу на GitHub
Я разветкил проект на Github.
Пусть удаленный upstream будет upstream
, а мой удаленный репозиторий будет origin
.
Моя локальная ветвь master
настроена на отслеживание удаленной ветки master
.
Затем я добавил некоторые вещи в локальный master
, и время от времени я сливался с восходящим потоком.
Не до сегодняшнего дня, когда я хочу выдать запрос на перенос, я нашел проблему:
запрос pull состоит из слияния, а те нежелательные коммиты, которые я сделал ранее, не заботятся. Однако то, что я хочу, это просто отправить последнюю фиксацию, которую я сделал, которую нужно вытащить как единую фиксацию.
Что я могу сделать, чтобы спасти это?
Ответы
Ответ 1
Вместо слияния вы хотите переустановить. Вы можете сделать это вручную или автоматически, когда тянете.
git pull --rebase upstream master
git push --force origin master
Как только вы начнете выполнять слияния, хотя это будет сложно сделать, вам понадобится reset ветвь назад до того, как вы совершили слияние.
Ответ 2
Если я понимаю ваш вопрос, вы хотите избавиться от промежуточных/отложенных коммитов, которые вы сделали в своем филиале. Попробуйте что-то вроде этого:
git checkout -b for-upstream remotes/origin/master (create a new branch from the upstream origin)
git cherry-pick <sha-of-the-one-commit-you-want-to-submit> (fix any conflicts if necessary)
это должно дать вам локальную ветку "for-upstream", которая содержит только начальную команду + ваш 1 фиксацию. Затем вы можете отправить эту ветку для запроса на перенос
Ответ 3
В Github вы не можете создать запрос на перенос для одной конкретной проверки на ветке с несколькими сеансами, отделяющими ее от восходящего потока.
Создайте ветвь специально для каждого запроса на растяжение, которое вы намереваетесь сделать. Это позволяет продолжить работу, не опасаясь загрязнения запроса на тяну.
Ответ 4
Будет ли это работать:
Создайте отдельную ветку только с требуемым фиксацией и выпустите запрос на перенос в этой ветке.
Ответ 5
Это похоже на ответ на ваш вопрос (раздел "Обновление 2011-04-15" в теме):
Git проблемы с рабочим процессом и rebase vs merge
Micah описывает метод слияния сквоша, который позволяет объединять изменения с вашей ветки признака как единое целое с ведущей ветвью.