我已经提交了一段时间了,我意识到有一个文件我想在所有提交中更改回初始版本。在过去的所有提交中,用一个文件覆盖另一个文件的最简单方法是什么?
答案 0 :(得分:0)
确认 - 您想要的是存储库中的所有文件保持不变,除了将在所有提交中更改的文件:
这是一个干净简单的方法: 创建一个文件,其内容完全符合您的要求。将它放在存储库之外的目录中。
运行以下命令: git filter-branch --tree-filter'cp'HEAD
请注意,这将更改所有提交的提交哈希值(因为文件内容更改)。在开始
之前,您可能希望使用git checkout -b <new branch>
创建单独的分支
答案 1 :(得分:0)
如果要查看文件的原始版本,只需输入:
git checkout HEAD filename
如果你知道你想要的特定版本哈希,你也可以这样做:
git checkout 653e0c0 filename
答案 2 :(得分:0)
Artifactory和git-log
的组合可以解决问题。试试这个:
$ git checkout `git log --pretty="format:%h" your_file | tail -1` -- your_file
现在剖析一下这意味着什么:
git log --pretty="format:%h" your_file
将返回your_file
的所有日志历史记录。我们使用--pretty="format:%h"
标志将输出限制为仅提交sha。如果单独运行此命令,您将看到它返回构成文件历史记录的提交列表。 (删除--pretty="format:%h"
以查看完整日志)
然后我们必须使用愚蠢的管道| tail -1
来获取上一个git-log
命令列表中的最后一个提交。最后一次提交将对应于您的文件所属的第一次提交。我们必须进行管道处理,因为git log --reverse -1
在重新排序结果(即-1
标志)之前首先对提交进行过滤(即--reverse
标志)。因此,git log --reverse -1
的结果是返回与您的文件关联的最新提交,而不是最早的初始提交。
然后我们使用git checkout <first_ever_commit_sha> your_file
命令将您的文件重新回到第一次提交。