在参与一个开源项目时,我在使用 git 时遇到了以下问题。我进行了一些更改,并发送了一个 pull-request。起初,这个 PR 被接受了。然而,我的更改后来被发现存在一些微妙的错误,因此维护者撤销了我的提交,并要求我修复问题后再次发送 pull-request。然而,在此期间已经有很多其他的提交了,因此我需要更新我的 pull-request。不幸的是,我无法让 git 在最新的
现在,我想将其转换成以下形式,以便在最新的
然而,我使用
master
状态上重新应用我的旧 PR 或 cherry-pick。
让我通过一个例子来澄清一下。假设我的原始 pull-request 包含提交 A
和 B
并被接受了。然后,几个提交之后我的 PR 被撤销了 (R
),然后又发生了几个提交。历史记录看起来像这样:
...--A---B--...--R--...--o master
现在,我想将其转换成以下形式,以便在最新的
master
状态上改进我的拉取请求:...--A---B--...--R--...--o master
\
A---B newPR
然而,我使用
rebase
和cherry-pick
都没有成功。问题似乎是git认为A
和B
已经是master
的一部分,因为它们已经在历史记录中了。所以,它不会将这些更改应用于master
之上。如何强制git执行此操作?
rebase
和cherry-pick
命令。 - jub0bsA
和B
的更改不在那里。就 Git 而言,这不是错误。rebase 命令是git rebase --onto master beforePR B
,其中beforePR
是A
之前的最后一个提交。这是从git rebase
手册中直接摘录的。cherry-pick 是git cherry-pick A..B
。 - Lemmingcherry-pick
命令有一个--keep-redundant-commits
选项,也许这个选项可以解决你的问题。我本想回答并发布此答案,但是我无法复制你的错误状况;我总是能够cherry-pick一个被还原的提交。 - musiKkrebase -i
手动删除它们... - Lemming