git mv和Eclipse中的重构
我如何解决这种“鸡和蛋”的局面 我决定在Eclipse中重命名一个Java类(比如从git mv和Eclipse中的重构,eclipse,git,refactoring,Eclipse,Git,Refactoring,我如何解决这种“鸡和蛋”的局面 我决定在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
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
我理解为什么会发生这种情况,但是如果我在重构之前做了gitmv
,Eclipse将不会像这样
解决这个问题的好方法是什么?
gitmv
只是一种方便的方法。(也就是说,它可以检测到它们,但它们不会被记录为像添加或删除这样的操作)。要准备并提交重构,请执行以下操作:
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
在版本控制中要删除文件时仍然有用,但要将文件保留在工作目录中。实际上,您不需要--cached
,如果文件不在工作树中,git-rm
不会抱怨。@shelhamer谢谢。我理解git add
部分,但是当git status
已报告已删除时,为什么我需要运行git rm
:myproj/src/com/ate/lib/one.java
?@Mark Longair,谢谢你的提示!我想我已经习惯了使用--cached,所以请自动将其放入其中。@ateiob,请参阅我的更新答案git rm
告诉git您要删除该文件git status
报告文件已在工作目录中删除,而不是您已对其删除进行版本控制。如果启用了颜色,“deleted”(已删除)将为红色,表示更改已发生,但未暂存,并且在git rm
之后,deleted(已删除)将显示更改已暂存。