Я разработал проект на GitHub и успешно вносил изменения в мой локальный мастер и подталкивал к началу на GitHub. Я хочу отправить запрос на удаление, но хочу включить только последний коммит. Пользовательский интерфейс запроса на загрузку на github.com показывает последние 9 коммитов, и я не знаю, как это отфильтровать.
Я пытался понять, если я должен создать новую локальную ветку, проверить это и как-то сбросить или перебазировать в апстрим? Затем примените мой последний коммит от моего мастера по id к новой локальной ветке и используйте это для запроса на получение?
Я пытаюсь получить правильные концепции и определить правильные командные строки, чтобы сделать то, что мне нужно.
git
github
pull-request
Кевин Хакансон
источник
источник
Ответы:
Вам нужно создать новую ветку и выбрать те коммиты, которые вы хотите добавить в нее.
После этого вы увидите
<new-branch-name>
ветку на github, переключитесь на нее и сможете отправить запрос на получение с нужными вам изменениями.источник
git remote add upstream <git repository>
иgit remote update
до запуска git checkout -b upstream upstream / master.Создайте новую ветку, начиная с самого последнего коммита, который также находится в исходном репозитории:
Затем используйте
git cherry-pick
для получения единственного коммита, для которого вы хотите запрос на получение. Если вызывается ветка с этим коммитом,feature
а нужный коммит является последним коммитом в этой ветке, это будетПредполагая, что этот патч применяется без конфликтов, теперь у вас есть ветка, для которой вы можете выполнить свой пул-запрос.
На втором этапе вам нужно решить, что делать с вашей
feature
веткой. Если вы еще не опубликовали свои изменения в этой ветке, вероятно, лучшая процедура - перебазировать эту ветку на новую ветку (и удалить последний коммит, если это не было сделано автоматическиgit rebase
).источник
feature
он уже зафиксированorigin/master
, во время ничего не происходитcherry-pick
. Новая ветвь должна быть отupstream/master
(т.е. ответ Кевина Хакансона)Я оказался в ситуации, когда я разветвился и хотел отправить запрос на извлечение обратно в исходный проект.
Я имел:
Для этого я:
Команды git были что-то вроде:
Затем я выбрал my-feature-request в качестве ветви для моего pull-запроса к исходному проекту.
источник
Это почти сработало для меня:
Единственная разница была в следующем:
Мне нужно было изменить эту последнюю строку, чтобы git push сделал ветвь вверх по течению в моем репозитории GitHub, чтобы я мог сделать PR из этого.
источник
Я уже сделал коммит, который хотел бы иметь возможность изолировать как запрос на возврат к текущей ветке.
Итак, я проверил новую ветку
И вот здесь мое решение отличается от решения @Kevin Hakanson , так как мне нужно сбросить эту ветку на то место в истории, от которого я хочу перейти
И вишня - выберите коммит, из которого я хочу создать изолированный запрос на извлечение.
Наконец, подтолкни его к пульту
И вытащить запрос DAT Ши.
источник
Решение создать новую (временную) ветвь cherry-pick и создать запрос на извлечение для этой ветки меня не удовлетворило. Я не хотел менять свой репозиторий, чтобы сделать доступным набор коммитов, поэтому я предложил следующую альтернативу:
Сначала создайте файлы патчей для всех коммитов:
Если коммит интересов окажется последним, который вы можете использовать
HEAD
вместо этого<sha>
.Теперь вы можете отправить исправления сопровождающему исходного репозитория, который может применить их:
Наконец, это должно выглядеть так же, как если бы временная ветвь была объединена по запросу извлечения, но без этой дополнительной ветки в репозитории fork.
источник
Основываясь на ответе @ kevin-hakanson, я написал этот небольшой сценарий bash, чтобы облегчить этот процесс. Он добавит репозиторий в восходящем направлении, если он еще не существует (запрашивая у вас URL), а затем запросит имя новой создаваемой ветви и тег / SHA для фиксации вишни, выбранной для этой ветви. Он проверяет, в какой ветке или коммите вы находитесь, а затем сохраняет все изменения, чтобы вы могли проверить новую ветку. Стратегия слияния сохраняет изменения от вишневого коммита. После нажатия на новую ветку
origin
(предполагается, что это имя вашего удаленного репо), ветка или фиксация, на которой вы были до этого, снова извлекается, и ваши предыдущие изменения извлекаются из тайника.(Это сработало для меня в нескольких простых тестах, но я не программист bash или git-эксперт, поэтому дайте мне знать, если есть пропущенные мной случаи, которые можно было бы автоматизировать лучше!)
источник