我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?
当前回答
执行下列命令,进行软重新设置,变更到您的本地。
git reset --soft HEAD^1
查看您此前承诺的文件的状态,到达您的本地,然后进行更改。
git status
承诺并按下文件后进行更改. 未来的承诺历史错误的文件将不会显示
在从起源中提取之前,始终保持喷射(可选步骤)
git remote prune origin
其他回答
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 支票。
基本上,每个人都会在这种情况下手动做的一切,包装在一个美丽而高效的吉特阿利亚 - 吉特预测
这里有很多建议,主要沿着 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 log 获取特定版本的 hash 密钥,然后使用 git checkout <hashkey>。
注意:不要忘了在最后一个之前输入哈希,最后一个哈希标记了您的当前位置(头部)并不会改变任何东西。
git checkout ref♰commitHash -- filePath
吉。
git checkout HEAD~5 -- foo.bar
or
git checkout 048ee28 -- foo.bar
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别