我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?


当前回答

我想我找到了它......从 http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html

有时你只是想回去,忘记每一个变化都过去了一个特定的点,因为它们都是错误的。

开始与:

$ 登录

它向您展示了最近的承诺列表,以及它们的SHA1哈希。

接下来,类型:

$ git 重新设置 --hard SHA1_HASH

将国家恢复到一定的承诺,并将所有新的承诺永久从记录中删除。

其他回答

这是一个非常简单的步骤. 检查文件到我们想要的承诺ID,这里一个承诺ID之前,然后只是 git承诺修改,我们已经完成了。

# git checkout <previous commit_id> <file_name>
# git commit --amend

如果我们想把任何文件带到承诺的顶部的任何先前承诺 ID,我们可以轻松地做到。

显然,有人需要在 git 上写一本可理解的书,或者 git 需要在文档中更好地解释。

cd <working copy>
git revert master

他们会放弃最后的承诺,似乎正在做。

伊恩

这里有很多建议,主要沿着 git checkout $revision - $file 的线条。

git show $revision:$file > $file

而且,我使用这个很多只是暂时看到一个特定的版本:

git show $revision:$file

git show $revision:$file | vim -R -

(OBS: $ 文件需要预定为./ 如果它是 git 显示 $ 修订的相对路径: $ 文件工作)

更奇怪的是:

git archive $revision $file | tar -x0 > $file
git revert <hash>

它听起来像你认为 git revert 只会影响最新的承诺。

它不会解决你的问题,如果你想转换一个更改在一个特定的文件,并承诺更改超过该文件。

git-aliases, awk 和 shell 功能到救援!

git prevision <N> <filename>

在 <N> 是对 <filename> 文件进行回复的文件修订的数量. 例如,要检查单个文件 x/y/z.c 的即时以前修订,请运行

git prevision -1 x/y/z.c

GIT预测是如何工作的?

将以下内容添加到您的 gitconfig

[alias]
        prevision = "!f() { git checkout `git log --oneline $2 |  awk -v commit="$1" 'FNR == -commit+1 {print $1}'` $2;} ;f"

命令基本上在指定的文件上执行一个 git 登录,并在文件历史中查定适当的 commit-id,并执行指定的文件的 commit-id 的 git 支票。

基本上,每个人都会在这种情况下手动做的一切,包装在一个美丽而高效的吉特阿利亚 - 吉特预测