我正在寻找一种方法来"隐藏"对Git中的一些文件所做的微小更改,这样在对这些文件进行不同的更改之前它们不会显示为git状态.
示例:我有一个java文件,其中唯一的更改是删除未使用的导入(贡献者在提交之前忘记运行组织导入).现在我已经删除了那个导入,并且更改(显然)显示在git中.由于我没有对该文件进行其他更改,因此我不喜欢将该文件作为另一个(不相关的)更改的一部分提交或单独提交此更改.当然,我可以恢复更改,只有在我必须对该文件进行更改时才应用它,但我可以"冒险"忘记它.
这样的任务是否存在命令?它有点像假设未改变的命令,但不是永久的方式.
如果没有这样的命令可以解决这个问题的正确方法是什么?
提前致谢.
ben*_*oth 63
在我的用例中(使用我个人计算机上编辑过的配置文件进行开发,在配置未更改的另一台机器上运行),这对我来说是解决方案:
开始忽略对文件的更改:
git update-index --assume-unchanged path/to/file
Run Code Online (Sandbox Code Playgroud)
继续跟踪:
git update-index --no-assume-unchanged path/to/file
Run Code Online (Sandbox Code Playgroud)
Hex*_*ugs 22
使用的缺点git update-index --assume-unchanged
是(正如git 手册所述),你向 git 承诺你不会更改文件。
当“假设不变”位打开时,用户承诺不更改文件,并允许 Git 假设工作树文件与索引中记录的内容匹配。
如果您违反此承诺并无论如何更改文件,都可能会产生不良后果。例如,在某些实现上,执行 agit stash
将丢弃您对文件所做的更改(如果您承诺不会更改它,为什么不应该这样做呢?)。
使用--skip-worktree选项来告诉 git 假装工作版本与索引版本是最新的。
读取条目时,如果它被标记为“skip-worktree”,则 Git 会假装其工作目录版本是最新的,并改为读取索引版本。
这似乎是忽略更改的更可靠方法,而不存在某些 git 命令可能会丢弃更改的风险:
git update-index --skip-worktree path/to/file
Run Code Online (Sandbox Code Playgroud)
要再次跟踪文件:
git update-index --no-skip-worktree path/to/file
Run Code Online (Sandbox Code Playgroud)
要列出您已设置的文件skip-worktree
:
git ls-files -v | grep ^S
Run Code Online (Sandbox Code Playgroud)
将尚未准备好的更改保存在单独的分支中。git rebase
根据需要,该分支位于主要历史记录的新变化之上。
无论是正在进行的开发、临时的事情,甚至是永远不会包含在主要项目历史中的事情——相同的过程都同样有效。
如果/当分支的更改准备好包含在主历史记录中时;合并它。如果没有,请将它们保留在单独的分支中并继续变基。
(旁注:git merge --no-ff
即使可以进行快进合并,也可能用于创建合并提交——根据您的项目规则,这可能更可取)
只是不要添加琐碎的更改。
最好在提交之前仔细检查添加的内容。
您甚至可以忽略文件中的某些更改,而使用添加
git add -p.
Run Code Online (Sandbox Code Playgroud)
如果使用gitx(R)则更容易。
归档时间: |
|
查看次数: |
4609 次 |
最近记录: |