从 git 中的单个目录还原更改

Revert changes from a single directory in git

我找不到合适的匹配项,但必须有更短的方法...假设我们有一个项目的子树,选择 one at random here 作为本地存储库,并且我想回到 12 月 11 日的修订版 6b6e73b3e77176a8a80ae01a1844914102728acd,即撤消上面的六个(在撰写本文时)提交。通过阅读文档,我知道我可以做到:

git revert commit1 commit2 commit3 commit4 commit5 commit6

但肯定有更简单、更通用的方法,比如:

git revert HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd \
        src/vs/editor/contrib/codelens

这给了我 "fatal: bad revision 'src/vs/editor/contrib/codelens'"。

当然,正在做:

git checkout 6b6e73b3e77176a8a80ae01a1844914102728acd \
        src/vs/editor/contrib/codelens

为我提供给定目录所需的修订,但我想要一个 git 生成的还原日志以实现可追溯性等。

我已经试验并得出结论这不是一个好主意,但本着分享的精神,这就是我想出的。首先,要获得要还原的版本列表,我做了:

git log --first-parent --no-merges --pretty=format:"%h" \
                  HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd .

所以,为了将其输入 git 还原,我做了:

git revert --no-commit $(git log --first-parent --no-merges --pretty=format:"%h" \
                  HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd .)

但是,在我自己的存储库中,事情变得一团糟并且存在很多合并冲突,所以我只好放弃并做了:

git revert --abort
git checkout 6b6e73b3e77176a8a80ae01a1844914102728acd \
        src/vs/editor/contrib/codelens

然后手动添加的结果为:

git log --first-parent --no-merges --oneline \
                  HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd .

提交消息。