git还原批量提交的多个文件

时间:2011-02-20 21:32:42

标签: git commit partial bulk revert

我正在熟悉GIT,只是放弃了svn并继续使用GIT。现在我弄脏了手:
我创建了一个分支并使用emacs宏更改了一堆文件,并使用commit -a将它们全部提交。我也对其他一些文件做了一些其他更改。在将所有内容合并到主服务器之前,我测试了一些内容,并且emacs宏缺少一些必要的细节。所以现在批量提交的大部分应该撤消但不是全部。批量提交后的提交也很可靠。什么是最简单的方法来恢复大部分提交的大部分?是否有樱桃挑选实用程序? 我目前正在使用命令行git和emacs vcs(git-el)。我已经买了一本书并浏览了几个网站,但到目前为止我还没有找到令人满意的答案。

的问候,
的Jeroen。

1 个答案:

答案 0 :(得分:1)

git revert -n <hash of bulk commit>将尝试撤消工作树中批量提交的更改。完成后,您可以使用git reset HEAD -- <paths to keep changes in>运行--patch(以交互方式选择要保留的更改)。然后你像任何其他提交一样提交它。

您的存储库是私有/非推送的吗?如果是这样,你有另外一个选择,虽然我不建议这样做。 git rebase -i <hash of commit before bulk>。编辑第一行(应该有第一行批量提交)以eedit开头。

此时,您可以使用git reset <hash of commit before bulk> -- <paths to revert>后跟git commit --amend来修复批量提交,以排除某些文件中的更改。然后git rebase --continue将在调整后的提交之上重写所有剩余的历史记录;您可能必须解决冲突并在触摸文件的恢复位时再次继续。在那之后,你的历史会像你从未做过一些不好的改变一样;对于一个可能是好事的私人项目,但要注意,在一次改变之后,回到你正在重写的任何中间状态变得非常困难。您可以使用git reflog执行一段时间,但最终旧版本的提交将过期并从存储库中删除。

在任何一种情况下,我建议使用git diff --name-only和一些编辑来组合一个文本文件,列出你想要/不想撤消的路径,然后使用像{{1在我讨论使用命令行上的路径列表来拉入该文件的地方。每行或空格分隔的一个可以正常工作。哦,如果你的路径中有空格,你需要在文件中的路径周围加上引号才能使它工作。