Избегайте нежелательных слияний и других коммитов при выполнении запроса на подачу на 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 описывает метод слияния сквоша, который позволяет объединять изменения с вашей ветки признака как единое целое с ведущей ветвью.