Отправить запрос тянуть на GitHub только для последнего коммита
Я разветвил проект на github и успешно вносил изменения в свой локальный Мастер и нажимал на origin на github. Я хочу отправить запрос на вытягивание, но хочу включить только последний коммит. Пользовательский интерфейс запроса на вытягивание github.com показывает последние 9 коммитов, и я не знаю, как отфильтровать это.
Я пытался понять, должен ли я создать новую локальную ветку, проверить это и каким-то образом сбросить или перебазировать вверх по течению? Затем примените мою последнюю фиксацию от моего мастера по идентификатору к новый локальный филиал и использовать его для запроса на вытягивание?
Я пытаюсь получить правильные концепции и выяснить правильные командные строки, чтобы сделать то, что мне нужно.
6 ответов:
вам нужно в основном создать новую ветку & cherry-pick коммитов, которые вы хотите добавить к нему.
Примечание: вам может понадобиться это перед проверкой / cherry-pick команды
git remote add upstream <git repository>
git remote update
git checkout -b <new-branch-name> upstream/master git cherry-pick <SHA hash of commit> git push origin <new-branch-name>
потом вы увидите
<new-branch-name>
ответвление на github, переключитесь на него и можете отправить запрос на вытягивание с изменениями, которые вы хотите.
создайте новую ветку, начиная с последней фиксации, которая также находится в репозитории origin:
git branch new-branch origin/master git checkout new-branch
затем использовать
git cherry-pick
чтобы получить одну фиксацию, для которой требуется запрос на вытягивание. Если ветка с этой фиксацией называетсяfeature
и фиксация, которую вы хотите, является последней фиксацией в этой ветке, это будетgit cherry-pick feature
предполагая, что этот патч применяется без конфликта, теперь у вас есть ветка, для которой вы можете сделать свой запрос на вытягивание.
на втором этапе, теперь вам нужно решить, что делать с вашим
feature
филиала. Если вы еще не опубликовали свои изменения в этой ветке, лучшей процедурой, вероятно, является перебазирование этой ветви на new-branch (и удаление последней фиксации, если это не делается автоматическиgit rebase
).
Я оказался в ситуации, когда я раздвоил вилку и хотел отправить запрос на вытягивание обратно в исходный проект.
Я:
- orignal_project
- forked_project (создан из исходного проекта на SHA: 9685770)
- my_fork (создан из разветвленного проекта на SHA: 207e29b)
- фиксация в моей вилке (SHA: b67627b), которую я хотел отправить обратно в исходный проект
для этого, Я:
- создал новую ветку из SHA, где исходный проект был разветвлен
- вытащил все из оригинального проекта
- черри выбрал фиксацию, которую я хотел отправить в качестве запроса на вытягивание
- толкнул все это до github
команды git были что-то вроде:
- git branch my-feature-request 9685770
- git checkout my-feature-request
- git pull https://github.com/original_project/original_project.git
- git cherry-pick b67627b
- git push origin my-feature-request
затем я выбрал my-feature-request в качестве ветви для моего запроса на вытягивание в исходный проект.
Это почти сработало для меня:
git checkout -b upstream upstream/master git cherry-pick <SHA hash of commit> git push origin upstream
разница была только в следующем:
git push origin upstream:upstream
мне нужно было изменить эту последнюю строку, чтобы git push сделал восходящую ветвь в моем репозитории GitHub, чтобы я мог сделать PR из нее.
Я уже сделал коммит, который я хотел бы иметь возможность изолировать в качестве запроса на вытягивание обратно на текущую ветку.
поэтому я проверил новую ветку
git checkout -b isolated-pull
и вот здесь мое решение отличается от @Кевин Hakanson по, так как мне нужно сбросить эту ветку на то место в истории, которое я хочу отличить от
git reset --hard [sha-to-diff-by]
и cherry-выберите фиксацию, из которой я хочу создать изолированный запрос pull
git cherry-pick [my-isolated-commit-sha]
наконец, нажмите его до пульта дистанционного управления
git push origin isolated-pull
и вытяните запрос dat shi.
решение создать новую (временную) ветку, cherry-pick и создать запрос pull для этой ветви не удовлетворило меня. Я не хотел менять свой репозиторий, чтобы сделать набор коммитов доступным, поэтому я придумал следующую альтернативу:
сначала создайте файлы исправлений для всех коммитов, представляющих интерес:
git format-patch -1 <sha>
если фиксация интереса окажется последней, которую вы можете использовать
HEAD
вместо<sha>
.теперь, вы можете отправить патчи сопровождающий исходного репозитория, который может их применить:
git branch new-branch <master or some older commit where the fork diverged> git checkout new-branch git am < <the patch> ... git checkout master git merge new-branch
наконец, это должно выглядеть так же, как если бы временная ветвь была объединена запросом pull, но без наличия этой дополнительной ветви в Fork-репозитории.