Git:在单个文件上恢复旧提交

时间:2015-07-18 16:48:18

标签: git git-revert

我很擅长在git中使用revert,我想知道是否可以完成以下内容。假设我已经提交了一些提交,并且我有一个(自我解释)文本文件,如下所示:

This line was added at commit AAAAA
This line was added at commit BBBBB
This line was added at commit CCCCC

我想使用revert删除提交BBBBB所做的更改,以获取如下所示的文件:

This line was added at commit AAAAA
This line was added at commit CCCCC

但是,恢复提交BBBBB会导致合并冲突。有没有办法避免冲突?

2 个答案:

答案 0 :(得分:1)

  

但是,恢复提交BBBBB会导致合并冲突。有没有办法避免冲突?

要确切了解导致冲突的原因,请执行

git checkout --merge --conflict=diff3 -- path/to/file

将显示文本git不愿意自动登录的原始版本和两个更改版本。

归结起来,git将从还原提交到其父级的更改与从还原提交到当前版本的更改合并:

 bbbbb verson -> aaaaa version,

 bbbbb version -> cccccc version (+ whatever else)

并且变化很重叠,因此,git不会自动充电。

实际上,考虑到在几个大型项目中进行合并的数量,你可以确定任何自动调整git拒绝做的事都会产生不好的结果而不能容忍。

答案 1 :(得分:0)

如果您只想在单个文件上还原更改,假设您要还原上次提交的一部分,则只需签出先前提交的文件版本

git checkout HEAD~1 directory/path/file.txt
git add directory/path/file.txt
git commit -m "directory/path/file.txt reverted"

基本上git checkout HEAD .将所有文件从工作目录或仅指定目录或仅单个文件重置为给定提交的指定状态。

此外,如果您想将一个目录还原为3次提交状态,您可以:

git checkout HEAD~3 some/directory/