我正在寻找一种方法来“隐藏”对Git中的一些文件所做的微小更改,这样在对这些文件进行不同的更改之前,它们不会显示为git状态。
示例:我有一个java文件,其中唯一的更改是删除未使用的导入(贡献者在提交之前忘记运行组织导入)。现在我已经删除了那个导入,并且更改(显然)显示在git中。由于我没有对该文件进行其他更改,因此我不喜欢将该文件作为另一个(不相关的)更改的一部分提交或单独提交此更改。当然,我可以恢复更改,只有在我必须对该文件进行更改时才应用它,但我可以“冒险”忘记它。
这样的任务是否存在命令?它有点像假设未改变的命令,但不是永久的方式。
如果没有这样的命令可以解决这个问题的正确方法是什么?
提前致谢。
答案 0 :(得分:56)
在我的使用案例中(使用我个人计算机上编辑过的配置文件进行开发,在配置未更改的另一台计算机上运行),这是我的解决方案:
开始忽略对文件的更改:
git update-index --assume-unchanged path/to/file
再次跟踪:
git update-index --no-assume-unchanged path/to/file
答案 1 :(得分:4)
答案 2 :(得分:3)
在单独的分支中保留尚未准备好的更改。 git rebase
这个分支在必要时在主历史上发生了新的变化。
无论是正在进行的开发,临时的事情,甚至是主要项目历史中永远不会包含的事情 - 同样的过程同样有效。
如果/当分支的变化准备好包含在主历史中时;将其合并。如果没有,请将它们保存在单独的分支中并继续变基。
(旁注:git merge --no-ff
可用于创建合并提交,即使可以进行快进合并 - 根据项目规则,这可能更合适)
答案 3 :(得分:1)
使用 git update-index --assume-unchanged
的缺点是(作为 git manual states),您向 git 承诺您不会更改文件。
当“假设未更改”位打开时,用户承诺不会更改文件并允许 Git 假设工作树文件与索引中记录的内容相匹配。
如果您违反此承诺并更改文件,则可能会产生不良后果。例如。在某些实现中,执行 git stash
会丢弃您对文件所做的更改(如果您承诺不会更改它,为什么不应该这样做?)。
使用 --skip-worktree 选项告诉 git 假装工作版本与索引版本是最新的。
<块引用>当读取一个条目时,如果它被标记为跳过工作树,那么 Git 会假装它的工作目录版本是最新的,而是读取索引版本。
这似乎是忽略更改的更可靠方法,而无需担心某些 git 命令可能会丢弃您的更改:
git update-index --skip-worktree path/to/file
再次跟踪文件:
git update-index --no-skip-worktree path/to/file
要列出您设置了 skip-worktree
的文件:
git ls-files -v | grep ^S
答案 4 :(得分:0)
有多种方式[虽然可能不干净整洁,需要你注意]
.gitignore
,以便它不会显示提交。当您准备提交文件时,请小心将其从.gitignore
中删除git
上编写一个包装器,这将确保git commit -a
或git add .
之类的命令在所有问题上运行。另一种方法是使用git gui
或git citool
,您可以在视觉上确保您的文件不会被分阶段使用。区域,因此从未得到承诺git stash save
您唯一的工作文件。稍后当您准备好更改文件时,您可以git stash pop
继续工作并提交。希望有所帮助:)