如何在使用 bash/mv 移动文件后在 Git 中“重命名”文件

yol*_*yer 5 git

我经常使用mv系统命令重命名文件,却忘记使用git mv以保留文件历史记录:

~/gitproj $ mv myfile.foo newname.foo
Run Code Online (Sandbox Code Playgroud)

当我在提交之前意识到这一点时,我知道修复它的唯一方法是执行以下操作:

~/gitproj $ mv newname.foo myfile.foo        # Coming back to the old name
~/gitproj $ git mv myfile.foo newname.foo    # Moving forth again, but with git
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,比如只提供git文件被移动的信息?

它会是这样的:

~/gitproj $ git mv --cached myfile.foo newname.foo   # a pseudo git command
Run Code Online (Sandbox Code Playgroud)

编辑:

正如安德烈亚斯·格拉彭廷所写:

git add .
Run Code Online (Sandbox Code Playgroud)

让 git (自动)检测所有被重命名的文件,即使它们被修改过。但是这个命令将整个目录添加到索引中......

有没有一种方法,即使在较低级别,也可以仅更改一个文件的此信息?

cma*_*ter 5

因为 的效果git mv无非就是序列

mv myfile.foo newname.foo
git rm --cached myfile.foo
git add newname.foo
Run Code Online (Sandbox Code Playgroud)

无论如何,你可以简单地提供剩下的两个操作

git rm --cached myfile.foo
git add newname.foo
Run Code Online (Sandbox Code Playgroud)

完成移动。但是,这并不能为您节省 move-back-then-git-move 解决方法中的单个命令。

Afaik,这两个命令不能通过 git 别名捆绑:您需要为两个不同的命令提供两个名称,这与别名替换不兼容。因此,如果您绝对希望能够使用单个命令来完成此操作,则需要编写 shell 脚本或函数。使用 shell 脚本,~/.gitconfig如果您绝对想将其作为 git 命令调用,则可以在您的中为其添加别名,但如果我是您,我真的不会打扰。