从git中的单个目录还原更改
我找不到一个很好的匹配,但必须有一个更短的方法来做到这一点。。。假设我们有一个项目的子树,picking,作为本地存储库,我想回到12月11日的修订版6b6e73b3e77176a8a80ae01a1844914102728acd,也就是撤销上面的六个提交(在编写本文时)。通过阅读文档,我知道我可以做到:从git中的单个目录还原更改,git,git-revert,Git,Git Revert,我找不到一个很好的匹配,但必须有一个更短的方法来做到这一点。。。假设我们有一个项目的子树,picking,作为本地存储库,我想回到12月11日的修订版6b6e73b3e77176a8a80ae01a1844914102728acd,也就是撤销上面的六个提交(在编写本文时)。通过阅读文档,我知道我可以做到: git revert commit1 commit2 commit3 commit4 commit5 commit6 但肯定有一种更简单、更普遍的方法,比如说: git revert HEA
git revert commit1 commit2 commit3 commit4 commit5 commit6
但肯定有一种更简单、更普遍的方法,比如说:
git revert HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd \
src/vs/editor/contrib/codelens
这给了我“致命的:糟糕的修订‘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 revert --no-commit $(git log --first-parent --no-merges --pretty=format:"%h" \
HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd .)
因此,为了将其输入git revert,我做了:
git log --first-parent --no-merges --pretty=format:"%h" \
HEAD...6b6e73b3e77176a8a80ae01a1844914102728acd .
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 .
提交到提交消息。如果提交对其他目录有更改怎么办?是否也应该将它们还原?我假设它们不会,但即使它们还原,我也可以使用
git checkout
将它们还原为HEAD
,以便我们可以忽略此问题。一句话:一般来说,--first parent
和--no merges
的组合可能会隐藏修改目录的步骤。我建议您查看一下您单独使用--第一父级和--无合并时看到的提交列表