如何安全查询历史记录?
How to check out history safely?
在大多数情况下,检查以前的提交是安全的。但是由于 .gitIgnore
也是版本控制的,检查旧版本的 .gitIgnore
的旧提交可能会产生严重的副作用。
假设我们最新的提交包括以下文件:
.gitignore
忽略 config.properties
config.properties
我们的主要配置文件
由于 git 忽略 config.properties
恢复到较旧的提交将保持 config.properties
不变。
但是由于旧的提交不会忽略 config.properties 它现在显示为一个添加的文件。
为了再次检查最新的提交,可以:
- 提交文件
- 忽略文件
- 删除文件
- 或隐藏文件。
每一个都不理想。每个都有副作用。
提交文件或忽略文件(更新 .gitignore)创建一个新头。
删除文件或存储它们将删除我们的版本控制的那些文件。这意味着当返回到我们最新的提交时,这些文件将会丢失。
检出之前提交的最安全方法是什么?
恕我直言,问题是,在您的情况下,git checkout
本身可能会默默地覆盖所述文件的内容。
以下面的例子为例,其中 config.properties
实际上是在您历史记录的某个时间点被跟踪的:
- commit 1 :
config.properties
在 repo 中添加并提交
- commit 2 :
config.properties
被删除,并在 .gitignore
中添加一行
- 在您的磁盘上,您创建了一个本地
config.properties
,它被 git 忽略了
如果从第 3 步开始,您 运行 git checkout <commit 1>
,git 将用 commit 1
中存储的内容覆盖 config.properties
的内容。
如果这种情况可能会在您的回购协议中触发,我建议的最安全的操作顺序是:
- 运行
git stash -a
前运行宁git checkout
先
git stash -a
是一个快速的一行,也许有些文件你也不想隐藏(比如:obj/
目录),你可以 select 文件你想包括在那个藏匿处:
git stash push -a -- config.properties config/
# 'push' can be omitted :
git stash -a -- config.properties config/
如果您担心工作目录发生任何变化,只需使用 git worktree
git worktree add ../<new dir> <sha or branch>
编辑:
抱歉,我记错了最好检查 docs
的语法
在大多数情况下,检查以前的提交是安全的。但是由于 .gitIgnore
也是版本控制的,检查旧版本的 .gitIgnore
的旧提交可能会产生严重的副作用。
假设我们最新的提交包括以下文件:
.gitignore
忽略config.properties
config.properties
我们的主要配置文件
由于 git 忽略 config.properties
恢复到较旧的提交将保持 config.properties
不变。
但是由于旧的提交不会忽略 config.properties 它现在显示为一个添加的文件。
为了再次检查最新的提交,可以:
- 提交文件
- 忽略文件
- 删除文件
- 或隐藏文件。
每一个都不理想。每个都有副作用。
提交文件或忽略文件(更新 .gitignore)创建一个新头。 删除文件或存储它们将删除我们的版本控制的那些文件。这意味着当返回到我们最新的提交时,这些文件将会丢失。
检出之前提交的最安全方法是什么?
恕我直言,问题是,在您的情况下,git checkout
本身可能会默默地覆盖所述文件的内容。
以下面的例子为例,其中 config.properties
实际上是在您历史记录的某个时间点被跟踪的:
- commit 1 :
config.properties
在 repo 中添加并提交
- commit 2 :
config.properties
被删除,并在.gitignore
中添加一行
- 在您的磁盘上,您创建了一个本地
config.properties
,它被 git 忽略了
如果从第 3 步开始,您 运行 git checkout <commit 1>
,git 将用 commit 1
中存储的内容覆盖 config.properties
的内容。
如果这种情况可能会在您的回购协议中触发,我建议的最安全的操作顺序是:
- 运行
git stash -a
前运行宁git checkout
先
git stash -a
是一个快速的一行,也许有些文件你也不想隐藏(比如:obj/
目录),你可以 select 文件你想包括在那个藏匿处:
git stash push -a -- config.properties config/
# 'push' can be omitted :
git stash -a -- config.properties config/
如果您担心工作目录发生任何变化,只需使用 git worktree
git worktree add ../<new dir> <sha or branch>
编辑: 抱歉,我记错了最好检查 docs
的语法