git - 忽略对git中文件的特定更改,而不是整个文件

标签 git gitignore ignore

我在 git 存储库中有一个文件,其中有一个本地更改。我想让 git 永远忽略本地更改,而不是文件。特别是,

  • 如果除了此更改之外未触及文件,git add . 永远不应暂存它。
  • 同样,git commit -a 不应该提交它。
  • 如果我对文件进行了额外的更改,我应该能够暂存并提交该更改 - 但我忽略的更改应该暂存和提交。

有没有办法做到这一点?在做一些研究时,我读到了“涂抹/清洁周期”,如果我没看错的话,

  1. 文件将被标记为未更改,
  2. checkout 时我所做的更改将被覆盖,
  3. 然后脚本会自动重新应用更改,然后再次将文件标记为未更改。

不过,我对 git 和脚本编写还很陌生(我是一名具有 C# 和 Java 经验的实习生),所以如果那是我需要做的,您能否发布详细的说明或指向如何操作的教程的链接设置污迹/清洁周期?

背景:我希望我的工作分支与主干不同步。有一个低优先级的错误只影响开发机器,所以我们没有修复它,只是注释掉有问题的代码。显然,我们不希望将这段代码从生产环境中删除,它工作得很好。

最佳答案

您可以使用 skip-worktree少量。打开它:

git update-index --skip-worktree <file>

在那之后,git 将永远不会为 <file> 暂存本地更改如果 git 本身必须写入 <file>,将会(大声地)失败(例如,在 merge 或 checkout 中)。

如果您想要进行 future 的更改,您可以将其关闭,进行新的更改,然后再将其重新打开:

git update-index --no-skip-worktree <file>
git add -p <file>
git update-index --skip-worktree <file>

虽然不完美,但这可能已经足够好了。 <file> 由您决定有未暂存的更改,因为 git 将不再告诉你

注意:我最初的建议是使用 assume-unchanged .如 Git - Difference Between 'assume-unchanged' and 'skip-worktree' 中所述, 真的是skip-worktree你要的那个。特别是, assume-unchanged是对 Git 的 promise ,您不会更改文件,如果您违反该 promise ,Git 将允许删除或提交您的更改! 相反,Git 不会删除或提交您的 skip-worktree变化。

关于git - 忽略对git中文件的特定更改,而不是整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16598257/

相关文章:

git - 在 git 存储库中的 .git 目录下提交和推送更改

git - Intellij Idea 将来自嵌套 git 存储库的文件显示为 "add new",即使在 .gitignore 中忽略了 directoriues

Git忽略本地删除的文件夹

git - 文件不断返回

git - 对于 libGDX 自动生成的默认项目,我的 .gitignore 中应该包含什么?

git - .gitignore 整个目录名称中有空格

svn - 继承svn :ignore properties in a subfolder doesn't work

git - 运行 jenkins 作业的 Bitbucket webhook

git - 如何处理对 Git 的非标准颠覆导入

git - 通过 SSL 使用我自己的 GIT 服务器设置 TeamCity