我将所有东西都提交给feature / 1234之类的特殊分支。我们认为已经完成的功能然后合并到master。 这个功能需要再次回到开发阶段,但是master中还有其他提交需要立即生效。
如何从master中获取这些单一提交并仍将它们保留在feature / 1234中?
编辑:功能/ 1234的提交不是最新的。
答案 0 :(得分:2)
了解问题后进行编辑
git rebase是你的朋友。只需运行git rebase -i commit-id
,其中commit-id
是您要删除的三个之前的那个,然后,当默认编辑器打开时,只需删除您在master上不需要的三个提交,保存并关闭。
旧版本,误解
如果我理解,您的第二个请求应该没有问题:如果您没有删除分支,则提交仍在 feature/1234
。
至于第一个请求,删除提交,只需运行
git reset --hard HEAD~1
将HEAD
移回一个提交
如果您想通过其ID返回特定提交,则可以运行git reset --hard commit-id
有关重置的详细信息:http://git-scm.com/blog/2011/07/11/reset.html和https://www.kernel.org/pub/software/scm/git/docs/git-reset.html
答案 1 :(得分:2)
如果你可以改变你的分支,那么这有时是最清除的方法 - 它的所有痕迹都将消失。缺点是,在违规提交进入的时间和删除提交的时间之间从主分支获取的任何分支都将具有与主服务器分歧的历史记录。如果你不能保证没有发生这种情况(例如,如果你已经将你的回购发布给其他人),那么使用git revert
恢复提交可能更合适。这会在你的主人之上产生一个新的提交,它会撤消旧的提交。因此,历史不断向前发展,而支行可以像往常一样简单地改变最新状态。