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

时间:2019-02-20 00:37:42

标签: git git-revert

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

<Group of 3 A's>

但是肯定有一种更简单,更通用的方式,例如:

git revert commit1 commit2 commit3 commit4 commit5 commit6

这给我“致命的错误:修订版'src / vs / editor / contrib / codelens'”。

当然可以:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

因此,为了将其输入到git revert中,我做到了:

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 .

提交消息。