Git 吉特认为我';我重命名了一个文件,而不是删除一个并创建另一个
Git 吉特认为我';我重命名了一个文件,而不是删除一个并创建另一个,git,Git,$git状态: renamed: test.foo -> database/migrations/.gitignore 实际发生的是我删除了test.foo,它是空的,并创建了一个空的.gitignore 我想它认为这些文件是相同的,因为它们都是空的。这对后来的历史有点误导——我宁愿它是准确的 如何解决此问题并使其将已删除的文件显示为已删除,将新文件显示为已创建?您可以: git rm --cached .gitignore git commit -m "delete test.f
$git状态
:
renamed: test.foo -> database/migrations/.gitignore
实际发生的是我删除了test.foo
,它是空的,并创建了一个空的.gitignore
我想它认为这些文件是相同的,因为它们都是空的。这对后来的历史有点误导——我宁愿它是准确的
如何解决此问题并使其将已删除的文件显示为已删除,将新文件显示为已创建?您可以:
git rm --cached .gitignore
git commit -m "delete test.foo"
git add .gitignore
这将有助于将这两项行动分开
- 首先取消跟踪
,同时保持.gitignore
在索引中被删除test.foo
- 然后跟踪(
)git add
.gitignore
这将避免重命名启发式(请参见“”)混淆。没有理由做任何事情。在内部,git中的重命名是不可能的——它们总是被视为先删除,然后追加。然而,git有一些启发式方法来帮助人们理解文件被重命名。这些启发式算法基于新文件与旧文件的相似程度 就像您的案例一样,这种启发式可能“太”有用了。然而,这可能会通过较新的git版本得到解决,因为对象存储格式不需要更改以区别对待这些启发式
您可能希望提交错误请求,以使空文件永远不会被视为重命名。重命名实际上不在git历史记录中-它是一种运行时启发式方法,可以为
git status
和其他一些git命令打印漂亮的消息。我同意您不必做任何事情,但我还是喜欢在不同的提交中保留不同的任务:在OP的情况下,隔离删除test.foo
应该不会有什么坏处。@VonC:这取决于上下文。然而,当提交逻辑上需要添加一个并删除另一个时,用额外的伪提交来污染git历史记录似乎也不是一个好的解决方案