【问题标题】:Revert changes from a single directory in git从 git 中的单个目录恢复更改
【发布时间】:2019-07-13 14:18:21
【问题描述】:

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

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 checkout 将它们恢复为HEAD,所以我们可以忽略这个问题。

标签: git git-revert


【解决方案1】:

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

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 .

提交信息。

【讨论】:

  • 一句话:一般来说,--first-parent--no-merges 的组合可能会隐藏修改你的目录的步骤。我建议您查看单独使用--first-parent 和单独使用--no-merges 看到的提交列表
猜你喜欢
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2016-08-15
  • 2012-03-29
  • 1970-01-01
  • 2016-11-01
  • 2011-03-15
相关资源
最近更新 更多