Git:恢复单个文件的旧提交

Git: Revert old commit on single file

我对在 git 中使用 revert 还很陌生,我想知道是否可以执行以下操作。假设我已经做了一些提交,并且我有一个(不言自明的)文本文件,如下所示:

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

我想使用还原来删除提交 BBBBB 所做的更改,以获得如下所示的文件:

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

但是,还原提交 BBBBB 会导致合并冲突。有什么办法可以避免冲突吗?

如果你只想恢复单个文件的更改,假设你想恢复上次提交的部分内容,你可以只检查上次提交的文件版本

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/

However, reverting commit BBBBB results in a merge conflict. Is there any way to avoid the conflict?

要找出导致冲突的确切原因,请执行

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

这将向您显示文本 git 不愿自动合并的原始版本和两个更改版本。

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

 bbbbb verson -> aaaaa version,

 bbbbb version -> cccccc version (+ whatever else)

并且变化大块重叠,所以,git不会自动合并。

作为一个实际问题,考虑到在几个大型项目中进行的合并数量,您可以确定任何自动合并 git 拒绝执行都会产生糟糕的结果,以至于无法容忍。