Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止Git更改忽略的文件,而不是删除相同的文件_Git_Version Control - Fatal编程技术网

防止Git更改忽略的文件,而不是删除相同的文件

防止Git更改忽略的文件,而不是删除相同的文件,git,version-control,Git,Version Control,.gitignore文件成功地忽略了所有web.config文件。情况并非总是如此。存在对web.config文件的长期历史引用。现在,web.config文件偶尔会在没有警告的情况下恢复到以前的状态。当开发人员更改以恢复web.config文件时,不会注意到与预期的不同 如何解释无法解释的恢复到以前版本的行为以及如何停止?我不希望更改存储库的整个历史记录,但这是允许的 --编辑-- 我发现了一个局部的错误。唯一的问题是,它会更改我的历史记录以包含web.config文件,然后删除它们。我现在认

.gitignore文件成功地忽略了所有web.config文件。情况并非总是如此。存在对web.config文件的长期历史引用。现在,web.config文件偶尔会在没有警告的情况下恢复到以前的状态。当开发人员更改以恢复web.config文件时,不会注意到与预期的不同

如何解释无法解释的恢复到以前版本的行为以及如何停止?我不希望更改存储库的整个历史记录,但这是允许的

--编辑--
我发现了一个局部的错误。唯一的问题是,它会更改我的历史记录以包含web.config文件,然后删除它们。我现在认为正确的做法是通过从一开始就删除对配置文件的所有引用来覆盖历史记录,即使在服务器上也是如此

您可能签出了包含该文件的旧提交。例如,在git-rebase-i期间直接或间接地使用
git-checkout
,您可能签出了包含该文件的旧提交。使用
git checkout
直接或间接地(例如,
git rebase-i
从所有提交历史记录中删除
web.config
文件),您可以执行以下命令:

touch .gitignore
echo 'web.config' > .gitginore
git rm --cached web.config
git add .gitignore
git commit -m 'add .gitignore to ignore web.config'
git filter-branch --index-filter 'git rm --ignore-unmatch --cached -r web.config' --prune-empty -f -- --all

重写历史记录可能需要更长的几分钟。之后,
web.config
文件将从git提交历史记录中完全删除。

要从所有提交历史记录中删除
web.config
文件,可以执行以下命令:

touch .gitignore
echo 'web.config' > .gitginore
git rm --cached web.config
git add .gitignore
git commit -m 'add .gitignore to ignore web.config'
git filter-branch --index-filter 'git rm --ignore-unmatch --cached -r web.config' --prune-empty -f -- --all

重写历史记录可能需要更长的几分钟。之后,
web.config
文件将从git提交历史记录中完全删除。

我使用git for Windows版本2.17.1.Windows.2是否要忽略在git提交历史记录中完成的web.config文件?是的,我要忽略所有web.config文件,即使是git提交历史记录中的文件。将它们从跟踪中删除,然后,
.gitignore
将正常工作。@haleonj我添加了应答,以从提交历史记录中完全删除wev.config。您可以试一试。我使用Git for Windows版本2.17.1.Windows.2是否要忽略Git提交历史记录中完成的web.config文件?是的,我要忽略所有web.config文件,即使是Git提交历史记录中的文件。将其从跟踪中删除,然后,
.gitignore
将正常工作。@haleonj我添加了应答,以从提交历史记录中完全删除wev.config。您可以试一试。请详细说明如何隐式或间接签出文件?我现在经常使用
git pull--rebase
,这与我的问题相对应。
git checkout$COMMIT\u ID
检查提交,即更新所有文件
git-rebase
逐个检查正在重新设置基础的所有提交
git-pull--rebase
不执行
git-rebase
,因此这可能是从旧提交更新文件的原因。请详细说明如何隐式或间接签出文件?我现在经常使用
git pull--rebase
,这与我的问题相对应。
git checkout$COMMIT\u ID
检查提交,即更新所有文件
git-rebase
逐个检查正在重新设置基础的所有提交
git-pull--rebase
确实
git-rebase
,因此这可能是从旧提交更新文件的原因。我发现您的答案最有帮助。我想补充一点,如果处于我位置的人停在
git rm--cached
上,那么文件最初将保留在工作树中,但随后的合并和重基会将其从工作树中删除,并且该文件将保留在历史记录中,以困扰您的
git bisect
调试会话。我发现您的答案最有帮助。我想补充一点,如果处于我的位置的人停在
git rm--cached
上,那么文件最初将保留在工作树中,但随后的合并和重基将从工作树中删除它,并且文件将保留在历史中,以困扰
git bisect
调试会话。