从不再相关的提交清理git分支

时间:2013-07-07 22:00:15

标签: git github

我正在自己独立的fork(在一个单独的分支中)处理一个项目。随着时间的推移,我已经提交了相当多的提交。我想推动上游的变化(拉取请求),但是我有许多提交,因为我正在开发中变得无关紧要。所以说我有像

这样的历史
A - B (upstream/master)
     \ 
      C - D - E - E1
               \
                1 - 2 -- 3 - 4 (local)
                     \  /
                       Z

现在,我想从4B提出拉取请求。有许多提交,如D,文件中不再存在,上游不需要知道。考虑A - B - C,其中A的文件内容与C相同。当我从C发出拉取请求时,我想首先清理分支,使B看起来好像从未发生过。

我该怎么做?

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

1 个答案:

答案 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