如何安全地查看历史记录?

问题描述 投票:0回答:2

在大多数情况下,检查以前的提交是安全的。但由于

.gitignore
也是版本控制的,因此使用旧版本的
.gitignore
检查旧提交可能会产生严重的副作用。

假设我们最新的提交包含以下文件:

  • .gitignore
    忽略
    config.properties
  • config.properties
    我们的主要配置文件

由于 git 忽略

config.properties
,恢复到较旧的提交将使
config.properties
保持原样。 但由于较旧的提交不会忽略 config.properties,它现在显示为添加的文件。

为了再次检查最新的提交,可以:

  • 提交文件
  • 忽略文件
  • 删除文件
  • 或隐藏文件。

每一项都不是理想的。每一种都有副作用。

提交文件或忽略文件(更新 .gitignore)会创建一个新头。 删除或隐藏文件将删除这些文件的版本控制。这意味着当返回到我们最新的提交时,这些文件将丢失。

检查先前提交的最安全方法是什么?

git version-control gitignore
2个回答
3
投票

如果您担心工作目录发生任何更改,只需使用

git worktree

git worktree add ../<new dir> <sha or branch>

编辑: 抱歉记错了语法最好检查docs


1
投票

恕我直言,问题是,在您的情况下,

git checkout
本身可能会默默地覆盖所述文件的内容。

以下面的示例为例,其中

config.properties
实际上在您的历史记录中的某个时刻被跟踪:

  1. 提交 1:
    config.properties
    已添加到存储库中并提交
  2. 提交 2 :删除
    config.properties
    ,并在
    .gitignore
  3. 中添加一行
  4. 在您的磁盘上,您创建一个本地
    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/
© www.soinside.com 2019 - 2024. All rights reserved.