Подтвердить что ты не робот

Git - Вишня выбирает одиночную фиксацию для запроса на растяжение

У меня, возможно, еще нет терминологии. Я сделал файл для добавления в открытый проект на git. Я разветкил проект. Я внес некоторые изменения, и мой последний коммит - это файл, который я хочу запросить в проекте, а не небольшие изменения, которые я сделал перед вами. Когда я перехожу на сайт github и делаю запрос на pull, я получаю все коммиты до того, который я хочу, который является последним из файла, и я не хочу отправлять все другие коммиты, потому что я не думаю, что это необходимо для проект. Только мои собственные изменения. Что я делаю? Должен ли я просто сделать другое res или прикрепить файл сингулярно и отправить, если это возможно.

4b9b3361

Ответ 1

Вам нужно создать новую ветку из удаленного HEAD, вишни-выбрать фиксацию для этой ветки, перетащить ветвь на свое репо на GitHub, а затем создать запрос на перенос.

git checkout -b mybranch
git fetch upstream
git reset --hard upstream/master
git cherry-pick <commit-hash>
git push origin mybranch:mybranch

Ответ 2

Поскольку я делаю это много, и мне пришлось искать этот ответ несколько раз, я поместил ответ SLaks в небольшой пакетный файл. Это для Windows/CMD, но должно быть тривиально портировать на Linux, Mac или PowerShell. Поскольку я обычно делаю несколько коммитов, каждый из которых представляет собой один запрос на извлечение, я также добавил переключение обратно в главную ветвь.

@echo off

REM Idea from: https://stackoverflow.com/info/25955822/git-cherry-pick-a-single-commit-for-pull-request

set BRANCH_NAME=%1
set COMMIT_HASH=%2

IF %BRANCH_NAME%.==. GOTO NoBranchName
IF %COMMIT_HASH%.==. GOTO NoCommitId

git checkout -b %BRANCH_NAME%
git fetch upstream
git reset --hard upstream/master
git cherry-pick %COMMIT_HASH%
git push origin %BRANCH_NAME%:%BRANCH_NAME%
git switch master

GOTO End

:NoBranchName
  ECHO No branch name given. Usage: add-pull-request.bat BRANCH_NAME COMMIT_HASH
GOTO End

:NoCommitId
  ECHO No commit id given. Usage: add-pull-request.bat BRANCH_NAME COMMIT_HASH
GOTO End

:End

Одним из очевидных улучшений было бы сначала выбрать текущую ветку, а затем использовать ее в последней строке, но это то, что мне не нужно, и это значительно усложнит ситуацию.