我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?
当前回答
有趣的是, git checkout foo 如果工作副本在一个名为 foo 的目录中工作,则不会工作;但是, git checkout HEAD foo 和 git checkout./foo 都会:
$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
其他回答
使用 git log 获取特定版本的 hash 密钥,然后使用 git checkout <hashkey>。
注意:不要忘了在最后一个之前输入哈希,最后一个哈希标记了您的当前位置(头部)并不会改变任何东西。
git checkout -- foo
這將重新安裝 foo 到 HEAD. 您也可以:
git checkout HEAD^ foo
一次重新审查等。
这是一个非常简单的步骤. 检查文件到我们想要的承诺ID,这里一个承诺ID之前,然后只是 git承诺修改,我们已经完成了。
# git checkout <previous commit_id> <file_name>
# git commit --amend
如果我们想把任何文件带到承诺的顶部的任何先前承诺 ID,我们可以轻松地做到。
对我来说,没有一个答案看起来很清楚,所以我想添加我的,看起来很容易。
我有一个承诺 abc1 之后我做了几个(或一个修改)到一个文件 file.txt。
1.git checkout file.txt : 这将删除本地变更,如果你不需要它们
2.git checkout abc1 file.txt : 这将使您的文件到您想要的版本
3.git commit -m “Restored file.txt to version abc1” : 这将承诺您的转换。
git push : 这将把一切推到远程存储库中
在步骤2和3之间,当然,你可以做 git 状态来了解正在发生的事情。 通常你应该看到 file.txt 已经添加了,这就是为什么不需要添加 git。
执行下列命令,进行软重新设置,变更到您的本地。
git reset --soft HEAD^1
查看您此前承诺的文件的状态,到达您的本地,然后进行更改。
git status
承诺并按下文件后进行更改. 未来的承诺历史错误的文件将不会显示
在从起源中提取之前,始终保持喷射(可选步骤)
git remote prune origin
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别