我为GitHub
上的一个开源项目做出了贡献,PR
被维护者拒绝。几个月后,我提出了一个PR
来解决其他问题,但是这个新的PR
也包括了较旧的commits
。如何排除旧提交?
以下是旧的PR
供参考:https://github.com/spring-projects/spring-boot/pull/15006
新的PR
链接:https://github.com/spring-projects/spring-boot/pull/15933
Pull request
还包括我从upstream/master
到master
我还从维护者那里得到了git
条命令:
git checkout master
git fetch upstream
git reset upstream/master --hard
但是我不确定我们在做什么。
答案 0 :(得分:2)
假设12次提交的历史记录并不重要,我基本上会这样做:
git reset HEAD~12
git stash
git pull upstream master --rebase
与上游同步git stash pop
弹出更改并应用到最新版本上git commit -m "some message"
git push -f origin YOUR_BRANCH
如果您关心提交历史,则可以按照@Tim Biegeleisen的建议进行操作
答案 1 :(得分:1)
Git基于directed acyclic graph,这意味着您不能在不损害存储库完整性的情况下排除或忽略部分历史记录。
但是,您可以rebase
在本地建立PR分支机构,并且可以:
要从提交请求分支中排除提交,您可以在本地执行交互式变基:
git checkout -b feature/failure-analyzer
git rebase -i HEAD~10 # Where 10 is the number of commits you want to rebase
git push --set-upstream origin feature/feature-analyzer
让我们根据您的情况进行审查:
叉库
您在本地分叉了项目
* a (HEAD, master, origin/master)
...
实现您的新功能
在您的开发流程中,您犯了一些错误,并且提交时嘈杂。不幸的是,您已经将更改推送到了派生的存储库上。
* e implementation done (HEAD, master, origin/master)
* d again oops
* c oops
* b implement feature foo
* a
清理工作
是时候用
清除提交了 $ git checkout -b feature/foo
$ git rebase -i HEAD~5
最终您得到以下历史记录:
* f implement feature foo (HEAD, feature/foo)
| * e implementation done (master, origin/master)
| * d again oops
| * c oops
| * b implement feature foo
|/
* a
执行拉取请求
现在,您可以进行工作并创建新的拉取请求:
$ git push --set-upstream origin feature/foo