我可能还没有这个术语。我把文件添加到git上的一个打开的项目中。我分叉了这个项目。我做了一些更改,我的最后一次提交是我要向项目请求的文件,而不是我之前做的小改动。当我去github网站并提出pull请求时,我得到所有提交的文件,我想要的是文件的最后一个,我不想提交所有其他提交,因为我不认为它是必要的该项目。只是我自己的改变。我该怎么办?我是否应该单独制作另一份资料或单独附上文件并提交,如果可能的话。
答案 0 :(得分:75)
你需要从远程HEAD创建一个新的分支,挑选对该分支的提交,将分支推送到GitHub上的repo,然后创建一个pull请求。
git checkout -b mybranch
git fetch upstream
git reset --hard upstream/master
git cherry-pick <commit-hash>
git push origin mybranch:mybranch
答案 1 :(得分:0)
由于我经常这样做,并且不得不多次查询该答案,因此我将SLaks答案放入了一个小的批处理文件中。这是针对Windows / CMD的,但是移植到Linux,Mac或PowerShell时应该很简单。由于我通常会执行几次提交,每个提交都是一个请求,因此我还添加了切换回master分支的操作。
@echo off
REM Idea from: https://stackoverflow.com/questions/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
一个明显的改进是首先选择当前分支,然后在最后一行中使用它,但这是我不需要的,这会使整个事情变得更加复杂。