我正在自己独立的fork(在一个单独的分支中)处理一个项目。随着时间的推移,我已经提交了相当多的提交。我想推动上游的变化(拉取请求),但是我有许多提交,因为我正在开发中变得无关紧要。所以说我有像
这样的历史A - B (upstream/master)
\
C - D - E - E1
\
1 - 2 -- 3 - 4 (local)
\ /
Z
现在,我想从4
向B
提出拉取请求。有许多提交,如D
,文件中不再存在,上游不需要知道。考虑A - B - C
,其中A
的文件内容与C
相同。当我从C
发出拉取请求时,我想首先清理分支,使B
看起来好像从未发生过。
我该怎么做?
请不要评论'你应该保留你的整个历史,它会显示你的想法& c'。我主要是出于兴趣而问。
答案 0 :(得分:2)
git rebase -i origin/master
会在当前origin/master
之上重播您的分支历史记录,您可以fixup
/ squash
提交或完全删除 (只需在编辑器弹出时删除提交行)。只需看看rebase期间的说明。
或者,您可以reset --hard origin/master
使您的分支与origin/master
处于同一状态,然后cherry-pick
您想要的提交。
顺便说一句,当我正在使用fork时,我通常会添加官方仓库:$ git add remote official https://github.com/rails/rails.git
当我想提交pull请求时,我会对其进行rebase:$ git fetch official
和$ git rebase official/master
。