0

我正在我自己的独立分支中(在一个单独的分支中)开发一个项目。随着时间的推移,我已经积累了大量的提交。我想将更改推送到上游(拉取请求),但我有很多提交在我开发过程中变得无关紧要。所以说我有类似的历史

A - B (upstream/master)
     \ 
      C - D - E - E1
               \
                1 - 2 -- 3 - 4 (local)
                     \  /
                       Z

现在我想从4to发出拉取请求B。有许多提交,例如D文件中不再存在并且上游不需要知道。考虑A - B - C文件内容在哪里AC. 从 发出拉取请求时C,我想先清理分支,让它看起来好像B从未发生过。

我怎样才能做到这一点?

请不要评论“你应该只保留你的整个历史,它显示了你的想法&c”。我问主要是出于兴趣。

4

1 回答 1

2

git rebase -i origin/master将在当前的基础上重播您的分支历史记录origin/master,您可以fixup/squash您的提交或完全删除它们(您只需在编辑器弹出时删除提交行)。只需在 rebase 期间查看说明即可。

或者,您可以将您的分支带入与您想要的提交reset --hard origin/master相同的状态。origin/mastercherry-pick

顺便说一句,当我在 fork 上工作时,我通常会添加官方 repo:$ git add remote official https://github.com/rails/rails.git当我想提交 pull request 时,我会在它的基础上做一个 rebase:$ git fetch official$ git rebase official/master.

于 2013-07-07T22:51:09.090 回答