繁体   English   中英

git恢复批量提交的多个文件

[英]git revert multiple files of bulk commit

我正在通过放弃svn并继续使用GIT来熟悉GIT。 现在,我已经弄脏了双手:
我创建了一个分支,并使用emacs宏更改了一堆文件,并使用commit -a提交了所有文件。 我也对其他文件做了一些其他更改。 在将所有内容合并到母版之前,我测试了一些内容,而emacs宏缺少一些基本细节。 因此,现在应该撤消大部分批量提交,但不是全部。 批量提交之后的提交也很可靠。 恢复大部分批量提交的最简单方法是什么? 有樱桃挑选工具吗? 我目前正在使用命令行git和emacs vcs(git-el)。 我已经买了一本书,浏览了一些站点,但是到目前为止,我还没有找到满意的答案。

问候,
耶隆

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

您的存储库是否为私有/未推送? 如果是这样,您还有其他选择,尽管我不建议您这样做。 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和一些编辑将文本文件列出来,这些文件列出了您想要/不想撤消的更改,然后使用$(< badfiles) ,在我谈论使用命令行路径列表将文件拉入的地方。每行一个或以空格分隔的文件都可以很好地处理这种情况。 哦,如果您的路径中有空格,则需要在文件中的路径两边加上引号,以使其起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM