在大多数情况下,检查以前的提交是安全的。但由于
.gitignore
也是版本控制的,因此使用旧版本的 .gitignore
检查旧提交可能会产生严重的副作用。
假设我们最新的提交包含以下文件:
.gitignore
忽略config.properties
config.properties
我们的主要配置文件由于 git 忽略
config.properties
,恢复到较旧的提交将使 config.properties
保持原样。
但由于较旧的提交不会忽略 config.properties,它现在显示为添加的文件。
为了再次检查最新的提交,可以:
每一项都不是理想的。每一种都有副作用。
提交文件或忽略文件(更新 .gitignore)会创建一个新头。 删除或隐藏文件将删除这些文件的版本控制。这意味着当返回到我们最新的提交时,这些文件将丢失。
检查先前提交的最安全方法是什么?
恕我直言,问题是,在您的情况下,
git checkout
本身可能会默默地覆盖所述文件的内容。
以下面的示例为例,其中
config.properties
实际上在您的历史记录中的某个时刻被跟踪:
config.properties
已添加到存储库中并提交config.properties
,并在 .gitignore
config.properties
,它会被 git 忽略如果从步骤 3 开始运行
git checkout <commit 1>
,git 将使用 config.properties
中存储的内容覆盖 commit 1
的内容。
如果您的仓库可能会触发这种情况,我建议的最安全的操作顺序是:
git stash -a
之前运行 git checkout
首先git stash -a
是一个快速的单行工具,也许有些文件您也不想存储(例如:obj/
目录),您可以选择要包含在该存储中的文件:
git stash push -a -- config.properties config/
# 'push' can be omitted :
git stash -a -- config.properties config/