我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?
当前回答
假设你想要的承诺的哈希是c5f567:
git checkout c5f567 -- file1/to/restore file2/to/restore
git checkout man 页面提供更多信息。
如果你想在 c5f567 之前返回承诺,添加 ~1 (在 1 是你想返回的承诺的数量,它可以是任何东西):
git checkout c5f567~1 -- file1/to/restore file2/to/restore
作为一个侧面注意事项,我一直对这个命令不舒服,因为它用于普通事物(分支之间的变化)和不寻常的破坏性事物(工作目录的变化)。
有一个新的 git 恢复命令,它是专门设计的恢复工作复制文件已被修改。 如果你的 git 足够新,你可以使用这个命令,但文档来了一个警告:
这个命令是实验性的,受害者可能会改变。
其他回答
我想我找到了它......从 http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html
有时你只是想回去,忘记每一个变化都过去了一个特定的点,因为它们都是错误的。
开始与:
$ 登录
它向您展示了最近的承诺列表,以及它们的SHA1哈希。
接下来,类型:
$ git 重新设置 --hard SHA1_HASH
将国家恢复到一定的承诺,并将所有新的承诺永久从记录中删除。
git revert <hash>
它听起来像你认为 git revert 只会影响最新的承诺。
它不会解决你的问题,如果你想转换一个更改在一个特定的文件,并承诺更改超过该文件。
git log --oneline // you see commits, find commit hash to which you want reset
git diff y0urhash src/main/.../../YourFile.java // to see difference
git reset y0urhash src/main/.../../YourFile.java // revert to y0urhash commit
git status // check files to commit
git commit -m "your commit message"
git push origin
有趣的是, 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 checkout HEAD^1 path/to/file
或
git checkout HEAD~1 path/to/file
然后,只是步行,并采取“新”版本。
武装着一个承诺可以有两个父母在合并的情况下,你应该知道,头1是第一个父母,头1是第二个父母。
或者它会工作,如果树上只有一个父母。
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?