如何删除以前的提交并保留所做的更改?

时间:2019-01-11 05:07:42

标签: git git-commit git-rebase

我有一个工作过的分支(称为my-working-branch),其中有几次更改。当我提交并推送对master的更改,从而创建了一个供审阅者合并的请求请求时,在请求请求中,我看到了要保留并合并到master的提交,还有很多我之前从未做过的其他更改,我从未更改过,并且由其他作者进行过更改。我正在使用Bitbucket,因此某些提交以“ M”显示为灰色,假设这意味着该提交已在master中合并,而有些提交没有“ M”,并且以灰色显示,而没有像我从my-working-branch的提交那样合并。

现在您已经了解了我的处境,我想做的就是保留我在pull请求中拥有的前四个最近的提交,并删除my-working-branch中的所有其他提交(此分支上没有其他人可以使用)并对其进行了更改,但我除外),这似乎是在我创建的请求中显示的先前日期中添加的。我已经查看了有关使用rebase命令的其他stackoverflow问题,但是由于据我了解,这是一个破坏性命令,会重写历史记录。如果这只会影响我的本地分支和pull请求以反映这一点,我会很好用,但是我想绝对确定这是正确的方向,如压缩所有这些先前的提交并仅保留最近的前四个提交我已经进行了更改,应该只更改这四个提交,而其余的未在pull请求中显示,然后合并到master。

在这种情况下将采取什么适当的措施?

例如:({d74981d0dcd..041727236cb保留前四次提交,其余的我想从拉取请求中删除)

enter image description here

1 个答案:

答案 0 :(得分:1)

  

关于使用rebase命令,但是根据我的理解,这是一个破坏性命令,会重写历史记录

这无关紧要,因为您是该PR分支上唯一的人员。

注意:您不是将PR分支推送到master,而是推送到远程端的同一PR分支,而是从该分支而不是master进行PR。

添加远程“上游”以引用您的原始存储库,并将分支机构重新建立在上游/主服务器之上

git remote add upstream /url/original/repo
git fetch upstream
git checkout my-working-branch
git rebase upstream/master
git push --force -u origin my-working-branch

如果您已经从起源/主分支获得公关,则改为

git push --force origin my-working-branch:master

rebase选项为:

git rebase -i --onto upstream/master 2f1...my-working-branch

那将:

  • 结帐my-working-branch
  • 将其重置为upstream/master,然后
  • 2f1(排除2f1之后,重放所有,直到my-working-branch HEAD为d74