Git 201 - Cleaning Up Respository

在使用版本控制时,总会遇到对某些文件做出了修改,但最后发现该修改错误,而需要恢复到修改前的版本。亦或添加了一个新的文件,在未进行 Commit 之前需要移除,就要借用下面这些命令。相当于 TFS 的 Undo。

撤销修改

如果对已 commit 过的文件作出了更新,而想要将这次的更新 Undo 掉,也就是恢复到本次修改前的状态时,就需要 checkout 命令了,对于被删除的文件,在未提交前,也可用该命令进行复原。

在项目中进行修改和删除操作,status 如下:

1
2
3
4
5
6
7
$ git status
# On branch feature/auth
# Changes not staged for commit:
# modified: config.ru
# deleted: config/routes.rb
#
no changes added to commit (use "git add" and/or "git commit -a")

这时可通过checkout来进行撤销操作。

1
$ git checkout .

.所指的是当前目录,也可通过PATH来指定特定目录或具体文件。

此时,本次对该仓库所做的所有修改都被恢复到上次提交后的状态了。

清除未被 Track 的文件

项目开发中,在仓库中添加了新的文件,却发现这个文件并不需要,也不想在 .gitignore 中作忽略配置。只想在提交前进行移除,就可以使用 clean 命令。

1
git clean -n -d <path>

该命令并不会真正的移除你所指定目录下的新加文件或目录,而是将那些新加的项全部打印出来。-d参数将移除那些未被 track 的文件和目录,而 -n 则表示只作打印,而不真正删除。

1
2
3
$ g clean -nd
Would remove abc/
Would remove clean.md

一旦确定了要删除的项目,就可以去掉 -n 参数来进行移除操作了。

1
2
$ g clean -d
fatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean

但git很明显为了防止误操作,强制指定-n-f 来进行显示或强制删除。这时通过-f参数就可以将指定目录下的新加文件给删除掉了。

1
2
3
$ git clean -df
Removing abc/
Removing clean.md

如果一个文件是被 git 所 ignore 的,它将不会出现在 clean 的列表里,如果想删除那些被忽略的文件,就需要-x参数了。这样即使是被 git 所 ignore 的目录或文件也会出现在被移除的列表中了。

  • -X 表示只删除被 ignore 的文件,而其它新建的文件目录则不在列表中。
  • 同样使用 -f 参数作真正删除。