我正在使用Git并手动重命名我已添加到存储库的文件。现在,我添加了“new”文件,我将其重命名为存储库,但Git抱怨“旧”文件已被删除。那么我怎么能让Git忘记旧文件呢?更好的是,我如何告诉Git“新”文件确实是“新”文件,以便我可以保持更改历史记录完好无损?
答案 0 :(得分:41)
没有问题。只需git rm old
甚至git add -A
,它就会意识到它是重命名的。 Git会看到删除加上与重命名相同的内容。
您无需撤消,取消暂停,使用git mv
等。git mv old new
只是mv old new; git rm old; git add new
的简写。
答案 1 :(得分:7)
首先,取消手动移动文件的暂存添加:
$ git reset path/to/newfile
$ mv path/to/newfile path/to/oldfile
然后,使用Git移动文件:
$ git mv path/to/oldfile path/to/newfile
当然,如果您已经提交了手动移动,则可能需要在移动之前重置为修订版,然后从那里简单地git mv
。
答案 2 :(得分:2)
试试这个:
mv new old
git rm new
git mv old new
答案 3 :(得分:0)
这必须是自动化的。在提交之前,我永远不会记住git,而且我也不想这么做。
#!/usr/bin/env python3
# This `git rm` wrapper respects the `--cached` option (like `git rm`).
import sys
import subprocess
if "--cached" in sys.argv:
dest = sys.argv[-1]
rest = sys.argv[1:-1]
subprocess.check_call(["git", "add", dest])
subprocess.check_call(["git", "rm"] + rest)
else:
subprocess.check_call(["git", "mv"] + sys.argv[1:])
我不想“记住git mv”,因为git mv
在git diff
之后添加了隐藏状态,这是隐式添加到下一个提交中的,即使您< em>明确地提交完全不相关的内容。我知道,这就是所谓的“暂存”状态,但是我不喜欢它。我喜欢毫不意外地承诺。
答案 4 :(得分:-1)
如果发生此错误,则可能意味着您尝试移动的文件最初未被git跟踪,或者您尝试将文件移动到的目录不是git跟踪目录。