git mv和Eclipse中的重构

我如何解决这个“鸡蛋和鸡蛋”的情况?

我决定在Eclipse中重命名一个Java类(例如,从one.java重命名为two.java). Eclipse重构让我顺利完成.

然后,我去了git并键入:

git mv myproj/src/com/ate/lib/one.java myproj/src/com/ate/lib/two.java

并收到错误:

fatal: bad source, source=myproj/src/com/ate/lib/one.java, destination=myproj/src/com/ate/lib/two.java

我理解为什么会这样,但如果我在重构之前做git mv,Eclipse就不会喜欢这个……

解决这个问题的好方法是什么?

最佳答案 git mv仅仅是一种方便的方法.
git does not “track” renames(也就是说,它可以检测到它们,但它们不会像添加或删除那样记录).要暂停和提交您的重构:

git rm myproj/src/com/ate/lib/one.java
git add myproj/src/com/ate/lib/two.java
git commit

git rm告诉git在索引中删除文件.虽然您已经在工作目录中“删除”了该文件(通过移动它),但您还没有告诉git您要对此删除进行版本控制. rm和git rm之间的区别在于第一个工作在工作目录上,第二个工作在索引上(更改为由git版本化).

git add只是在新位置添加文件内容.

编辑:

我以前有git rm –cached,出于个人习惯,但显然git rm不会抱怨如果工作目录中不存在该文件.当您想在版本控制中删除文件时,git rm –cached仍然有用,但将文件保留在工作目录中.

点赞