删除特定提交但保留之后的所有提交

时间:2016-12-18 07:25:00

标签: git version-control

据我所知,我确实以有条理的方式管理git。我提交了每个具体的更改,以便我可以随时恢复一点功能。在这个过程中,我在大约10天前添加了一个功能(提交#74fd458),在那里我添加了一个二进制文件并对3个跟踪文件进行了更改。

之后我做了至少15次提交。

  

dfs4334 - 新提交15
  2yu44m6 - 新提交14
  ...
  47jc063 - 新提交1
   74fd458 - 目标提交(现在似乎不需要)
  560dfsf - 旧提交1
  lfg956d - 旧提交2
  ...

现在我遇到了一种情况,那就是不需要特定的提交(阅读'功能')。事情很简单,打开一个提交可视化工具并删除那个特定提交中生成的那些特定行,删除那些已添加的二进制文件,然后就完成了。但是,你知道它很乱。

问:有什么方法可以保留我之后所做的所有更改,但是删除,还原或从分支中选择一个特定的提交?

PS。由于方案可以随时更改,因此可以在以后添加该特定功能。所以我不想完全从版本控制中删除该功能,我只是将这些功能放在一边,但要将它们放在某处,以便我可以随时将它们合并。

2 个答案:

答案 0 :(得分:2)

  

有什么方法可以保留我之后做的所有更改,但删除,还原或从分支中选择一个特定的提交?

git revert可能就是你要找的东西 来自文档:

  

还原一些现有提交

     

给定一个或多个现有提交,还原相关修补程序引入的更改,并记录一些记录它们的新提交

在您的情况下,原始提交和(让我说)还原提交都将成为项目历史的一部分。
如果需要,可以稍后恢复还原提交,即如果您需要再次应用原始提交。

有关详细信息,请参阅链接的文档。

答案 1 :(得分:0)

是的,有一种方法可以删除特定提交并保留后续提交:

  1. 结帐到分行并使用git rebase -i HEAD~16
  2. 有一个交互式窗口显示最新提交(顶部为74fd458,底部为最新dfs4334)。
  3. 输入i并删除要删除的提交(pick 74fd458
  4. Esc 按钮,然后输入:wq
  5. 因此将删除提交74fd458

    注意:如果存在冲突,您应该使用git add <filename>git rebase --continue