Skip to content

Git - 重命名操作

随着项目的演进,你可能需要重命名文件或将它们移动到不同的目录中。Git 提供了 git mv 命令来处理这些操作,同时保留文件的历史记录。

Jerry 决定组织一下项目结构。他想将所有源文件移动到一个 src/ 目录中,并将 string_utils.c 重命名为 str_ops.c 以简化名称。他还添加了一个 Makefile。

[jerry@devbox project]$ pwd
/home/jerry/project
[jerry@devbox project]$ ls
README.md string_utils.c
[jerry@devbox project]$ mkdir src
[jerry@devbox project]$ echo "# Basic Makefile\nall:\n\t@echo \"Build complete (placeholder)\"" > src/Makefile
[jerry@devbox project]$ git add src/Makefile # 添加新的 Makefile
[jerry@devbox project]$ git mv string_utils.c src/str_ops.c # 移动并重命名
[jerry@devbox project]$ git status -s
A src/Makefile
R string_utils.c -> src/str_ops.c

git status -s 显示新添加的 src/Makefile 为 A 状态,string_utils.c 为 R 状态,表明它已被重命名(并移动)到 src/str_ops.c。git mv 命令等同于手动移动/重命名文件,然后使用 git rm --cached <old_path> 并 git add <new_path>。

对于提交(commit)操作,Jerry 可以使用 git commit -m "message"。也可以使用 -a 标志(git commit -a -m "...")来自动暂存(stage)所有已修改的跟踪文件然后提交,但由于他已经对 Makefile 使用了 git add,并且 git mv 命令已经处理了重命名/移动文件的暂存,所以简单的 git commit -m 就足够了。

[jerry@devbox project]$ git commit -m "Organize sources into src/, add Makefile, rename string_utils to str_ops"

提交(commit)的输出将类似如下:

[main 94f7b26] Organize sources into src/, add Makefile, rename string_utils to str_ops
2 files changed, 3 insertions(+) # 示例:Makefile 中有 3 行
create mode 100644 src/Makefile
rename string_utils.c => src/str_ops.c (100%) # 100% 表示内容相同

提交(commit)后,他将更改推送到远程仓库:

[jerry@devbox project]$ git push origin main

该命令的输出将表明推送成功:

Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
...
To https://git.example.com/our_team/project.git
d1e19d3..94f7b26 main -> main

现在,其他开发者可以拉取(pull)这些结构性更改来更新他们的本地仓库。Git 非常智能,可以追踪 src/str_ops.c 的历史记录,直到它还是 string_utils.c 的时候。