Git将旧版本恢复为跨文件名更改的新提交

时间:2016-09-25 03:15:08

标签: git

我想恢复旧版本并将其作为新版本提交:

所以我这样做:

git checkout 1778b26 .

但是,如果最新版本和我要检出的版本之间存在重命名的文件,则两个文件名都将存在。 git clean -fdx无法解决此问题。

当我检查旧版本是否为新版本时,如何确保文件和目录与旧版本完全相同?

2 个答案:

答案 0 :(得分:2)

你可以:

  • 标记您当前的状态:git branch tmp
  • 将索引和工作树重置为旧提交:git reset --hard oldSHA1
    但是,这也会使HEAD退回并丢失oldSHA1之后提交的历史记录。
  • 将HEAD重置为yourCurrentBranch上一个HEAD(标记为tmp):
    git reset --soft tmp

从那里,您可以添加和提交:这将创建一个新提交,其内容与旧SHA1完全相同。

答案 1 :(得分:1)

使用

git diff 1778b26..HEAD | git apply -R --index

这会在另一个提交和当前HEAD之间生成差异,然后反转差异,将其应用于HEAD,然后在索引中记录更改。

只要您的存储库中没有任何二进制文件,这就应该有效。