Git 教程 - 文件操作

Jinku Hu 2023年1月30日 2018年7月19日
  1. Git 删除文件
  2. Git 重命名文件
  3. Git 移动文件
Git 教程 - 文件操作

在本教程中,你将学习 git 中的文件操作比如如删除、移动和重命名文件。

Git 删除文件

最简单的将文件从跟踪中删除并最终从存储库中删除的方法是 git rm

$ git rm tes2.txt
rm 'test2.txt'

运行该命令后,test2.txt 将从工作文件夹中删除该文件,并且此删除信息已添加到暂存区。

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	deleted:    test2.txt

Git 重命名文件

如果直接在工作区中重命名文件,Git 将此操作视为两个操作,第一是删除旧文件,第二是将新命名的文件添加到工作区中。

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	deleted:    test1.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	test1_rename.txt

no changes added to commit (use "git add" and/or "git commit -a")

这种操作的缺点是它会破坏文件的版本历史记录,此后你无法查看此重命名之前的历史修改记录,这在版本控制中是不可取的。

Git 有一个重命名命令来解决这个历史修订记录链接断开的问题 - mv

$ git mv test1.txt test1_rename.txt

mv 的意思就是 move,在这里,重命名文件也就意味着 test1.txt 文件被移动重命名为 test1_rename.txt

如果你现在检查 git statusrenamed 就会出现了,

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	renamed:    test1.txt -> test1_rename.txt

Git 移动文件

与重命名文件类似,在 git 中移动文件也使用 git mv 命令,只是目标文件夹与被移动文件原本的文件夹不同。

$ git mv test1_rename.txt move/test1.txt

这里,文件夹 move 是目标文件夹,test1.txt 是文件 test1_rename.txt 移动后的新文件名。

我们来看看 git status

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	renamed:    test1_rename.txt -> move/test1.txt

你可以看到,它也是一个 renamed 操作,只是目的地文件夹不同。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn