在某次提交后删除分支中的所有提交

Zak*_*ziz 18 git bitbucket

我很难掌握如何使用rebase/revert来实现这一目标.

我正在我的master分支上工作,经过一定的提交,我的软件停止工作.我不想放弃当时所做的更改,我按时达到了里程碑的压力,所以我回去了几个提交git checkout并创建了一个新的分支,working并开始推动我所有的更改.后来我意识到master不需要这些变化(在分支上进行).现在我想回到我的主分支并在我用于创建working分支的提交之后删除所有提交,然后将我的working分支合并到master分支.

我用在线照片编辑器创建了一个图像,试图解释我正在尝试做什么.我希望它有所帮助:

bitbucket的屏幕截图

我希望在5cb967f之后保留所有内容.摆脱5cb967f和a0c1de2之间的一切(不包括那些)

djs*_*djs 17

您有两种选择:

重写历史(破坏性)

您可以使用git-rebase重写历史记录,省略这些提交.您可以运行交互式rebase.从你的描述,我不能确定到底是什么,你有masterworking,但我假设所有的历史(有用和无用)是目前.

  git checkout master
  git rebase -i a0c1de2
Run Code Online (Sandbox Code Playgroud)

此时,您$EDITOR将弹出一个提交a0c1de2到HEAD的提交列表master.您可以删除对应的行以c460070..a3cb10e从历史记录中删除它们.

您的历史记录将在本地重写.如果您尝试推送此更改,则将是非快进更新.

恢复,保存历史(非破坏性)

如果您希望保留历史记录,则可以恢复一系列提交:

git checkout master
git revert c460070..a3cb10e
Run Code Online (Sandbox Code Playgroud)

这将创建7个新提交,每个提交按顺序恢复这些不需要的提交中的更改.