恢复过去的git提交,但保持自

时间:2016-12-01 14:01:57

标签: git commit revert

我是git的新手,不知道如何处理这个问题。

我想撤消一系列特定提交(与单个文件有关),我们认为这些提交不是解决问题的好方法,但我想保留自此以后引入的所有其他提交。

我不想只是编辑文件来删除那段代码,因为我觉得这里的回复更明确,并且更好地宣传。

它是这样的:

  

X - > Y - > X - > -X - > Y - > X - > X

Y 指的是与该特定功能相关的提交,X是我们希望保持完整的所有提交,最后是:

  

X - > X - > -X - > X - > X

我不确定rebase如何在这里工作,因为我不想仅仅包括从某一点开始的所有提交。

选择樱桃是一种更好的方法吗?

编辑:可能值得一提的是所有这些提交都被推送了。

4 个答案:

答案 0 :(得分:2)

您可以使用交互式rebase 来修复您的错误如果您的提交尚未共享(仍然是您的存储库中的本地提交)

语法是:git rebase --interactive commit的hash(或者只是git rebase -i commit的哈希)

在你的情况下,让我们说你的第一个x提交的哈希是x1(使用git log来git这个提交的哈希码),然后你可以使用:git rebase -i x1

enter image description here

对于您要删除的每个提交,请删除

替换选择

然后退出编辑模式(使用ESC键)和:wq

答案 1 :(得分:1)

您可以按照此处的说明使用git rebase --ontohttps://blog.pivotal.io/labs/labs/git-rebase-onto

在您的特定情况下:

X1 -> Y1 -> X2 -> X3 -> Y2 -> X4 -> X5

命令是:

git rebase --onto X3 Y2 # strips Y2
git rebase --onto X1 Y1 # strips Y1

答案 2 :(得分:0)

您可以将特定文件还原为以前的提交:

git reset <commit hash> <filename>

最好先查看对文件所做的更改:

git diff <commit hash> <file name>

您可以使用git log获取提交哈希值。

或者,您可以从版本控制中签出以前版本的文件:

git checkout -- <file name>

修改:更多信息here

答案 3 :(得分:0)

我个人更喜欢git rebase -i HEAD~10(最近10次提交的交互式rebase),我会通过评论他们的行来删除糟糕的提交。

请注意,这需要一个push -force,这总是要非常小心。