我在 git 存储库中有一个文件,其中有一个本地更改。我想让 git 永远忽略本地更改,而不是文件。特别是,
- 如果除了此更改之外未触及文件,
git add .
永远不应暂存它。 - 同样,
git commit -a
不应该提交它。 - 如果我对文件进行了额外的更改,我应该能够暂存并提交该更改 - 但我忽略的更改应该不暂存和提交。
有没有办法做到这一点?在做一些研究时,我读到了“涂抹/清洁周期”,如果我没看错的话,
- 文件将被标记为未更改,
- checkout 时我所做的更改将被覆盖,
- 然后脚本会自动重新应用更改,然后再次将文件标记为未更改。
不过,我对 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/