git 文件没有跟踪

软件版本:
  操作系统:ubuntu10.04
    内核版本:Linux version 2.6.32-36-generic
    git 版本:git version 1.7.0.4

目录:

  1. 文件状态
  2. 跟踪新文件
  3. 移除文件
  4. 文件移动
  5. 忽略文件
  6. 文件取消操作
    6.1 取消已暂存文件
    6.2 取消对文件的修改
  7. 参考资料

1. 文件状态

    查看文件当前处于什么状态的命令为:git status 。一般仓库中的文件可能存在于这三种状态:

    1)Untracked files → 文件未被跟踪;
    2)Changes to be committed → 文件已暂存,这是下次提交的内容;
    3) Changes bu not updated → 文件被修改,但并没有添加到暂存区。如果 commit 时没有带 -a 选项,这个状态下的文件不会被提交。

    值得注意的是,同一个文件有可能同时出现在第二和第三种状态中。例如:

复制代码

$git add NewFile
$vim NewFile                      # 编辑该文件
$git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    new file:   NewFile
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   NewFile
#

复制代码

  这时只需要将 NewFile 再添加一次就可以了。

复制代码

$git add NewFile
$git status

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

复制代码

2. 跟踪新文件

    要跟踪一个新文件,使用命令 git add 。例如要跟踪文件 FileName 。

    1) 添加跟踪之前的状态:

复制代码

$ git status

# On branch master
# Changed but not updated:
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    FileName
no changes added to commit (use "git add" and/or "git commit -a")

复制代码

    2) 跟踪新文件:

$ git add FileName

    3)对文件跟踪后的状态:

复制代码

$ git status

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

复制代码

    新添加的文件进入了暂存状态(Changes to be committed)。

3. 移除文件

    将文件从 git 仓库中移除的最根本目的就是使得 git 不再跟踪目标文件。这又产生了两种情况:
    1) 将文件从 git 仓库中移除,但仍然保留在当前目录中。

复制代码

$git rm --cached FileName

rm 'FileName'

$ls                  # 文件仍然保留在当前目录下

FileName

$git status          # 查看 git 的状态

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    deleted:    FileName
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    FileName

复制代码

    2) 将文件从仓库中移除,并且从当前目录中删除。

复制代码

$git rm FileName

rm 'FileName'

$ls                          # FileName 已经被删除

$git status

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

复制代码

4. 文件移动

    git 不会自动检索文件移动,所以如果你在仓库中对文件重命名则有可能导致错误,因为重命名后的文件没有被跟踪。

复制代码

$mv FileName NewFileName
$git status

# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    deleted:    FileName
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    NewFileName
no changes added to commit (use "git add" and/or "git commit -a")

复制代码

    正确的操作方法应该是:

复制代码

$git mv FileName NewFileName
$git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    renamed:    FileName -> NewFileName
#  

复制代码

5. 忽略文件

  请参考这里

6. 文件取消操作

  如果我们不小心将某些文件暂存了,或者取消对某个文件的修改,都可以通过 git status 的提示恢复过来。

6.1 取消已暂存文件

  假如我们不小心把某个文件 git add 到暂存区里面,需要取消这个暂存文件,按照 git status 的提示去做吧!

复制代码

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

复制代码

  根据提示,我们可以使用 git reset HEAD <file>...命令来取消已暂存的文件 AddFile 。  

复制代码

$ git reset HEAD AddFile
AddFile: locally modified
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   FileName
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   AddFile
#

复制代码

6.2 取消对文件的修改

  我们也可以将某个文件修改过但未被提交的文件恢复到上一次提交时的状态。

复制代码

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   FileName
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   AddFile
#

  按照提示,使用 git checkout -- <file>...命令将指定文件恢复。

$ git checkout -- AddFile
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   FileName
#

7. 参考资料:

[1] 《pro git》

<think>我们需要从工作目录中删除跟踪文件(untracked files)。在Git中,跟踪文件是指那些尚git add添加过的文件,即不在暂存区也不在版本库中的文件。 解决方案: 1. 使用 `git clean` 命令来删除跟踪文件。 2. 注意:`git clean` 是一个危险的命令,因为它会永久删除文件(不能从回收站恢复)。因此,在执行前务必确认。 步骤: - 首先,使用 `git clean -n` 或 `git clean --dry-run` 进行“演习”,查看哪些文件将被删除(不会实际删除)。 - 确认无误后,使用 `git clean -f` 强制删除跟踪文件。 - 如果要同时删除跟踪的目录,需要加上 `-d` 选项:`git clean -fd` - 如果还想忽略.gitignore中指定的文件(即同时删除被忽略的文件),则加上 `-x` 选项:`git clean -fdx` 但是,通常我们可能只想删除被忽略的跟踪文件,那么使用 `-f` 或 `-fd` 即可。 示例代码: 首先,我们查看当前工作目录的状态,可能会有跟踪文件: ```bash git status ``` 然后,进行演习(查看哪些文件会被删除): ```bash git clean -n ``` 或者,如果要包含目录: ```bash git clean -dn ``` 确认后,执行删除: ```bash git clean -f ``` 或者,同时删除跟踪的目录: ```bash git clean -fd ``` 注意:如果跟踪文件数量很多,并且你希望交互式地删除,可以使用交互模式(但交互模式没有内置,可以通过其他方式实现,比如使用`git clean -i`,但交互模式选项较少,通常我们使用`-n`查看后再用`-f`删除)。 另外,`git clean` 不会影响已跟踪文件的修改(即工作目录中已跟踪文件的修改不会被删除,除非使用`git reset --hard`,但那是另一个操作)。 安全建议:在执行删除前,可以先备份整个工作目录,或者使用`git stash`保存当前的修改(包括跟踪文件)?注意:`git stash`默认不会保存跟踪文件,除非使用`--include-untracked`选项。 备份跟踪文件的方法: ```bash # 将跟踪文件暂存到一个临时分支或使用stash git stash save --include-untracked "backup before clean" # 然后,如果你确定要删除,可以删除stash(或者先保留,等确认后再删除) # 如果需要恢复,可以使用`git stash pop`,但注意这会恢复暂存的修改和跟踪文件。 ``` 但是,如果我们只是要删除跟踪文件,并不需要保存它们,那么直接使用`git clean`即可。 总结命令: 1. 查看将要删除的文件: ```bash git clean -dn ``` 2. 删除跟踪文件和目录(不包括被忽略的文件): ```bash git clean -fd ``` 3. 删除所有跟踪文件(包括被忽略的): ```bash git clean -fdx ``` 注意:`-f` 是必须的,否则git会拒绝执行(除非配置了clean.requireForce为false)。 示例: 假设我们有以下跟踪文件: newfile.txt untracked_dir/another.txt 执行: ```bash git clean -dn ``` 输出: ``` Would remove newfile.txt Would remove untracked_dir/ ``` 然后执行: ```bash git clean -fd ``` 这样,文件就被删除了。 重要:这些操作不可逆,请谨慎使用。 相关问题:</think>### 清除 Git 跟踪文件的完整指南 在 Git 中,跟踪文件是指尚添加到版本控制的文件。以下是清除这些文件的专业解决方案: #### 1. 查看跟踪文件(安全第一步) ```bash # 查看所有跟踪文件(包括被忽略的) git clean -dnx # 仅查看被.gitignore忽略的文件 git clean -dn ``` #### 2. 删除跟踪文件的核心方法 ```bash # 基本删除(不包含被忽略文件git clean -f # 删除跟踪文件和目录 git clean -fd # 删除所有跟踪文件(包括被忽略的) git clean -fx # 彻底清除(文件+目录+被忽略的) git clean -fdx ``` #### 3. 交互式删除(推荐) ```bash # 交互式选择要删除的文件 git clean -id ``` #### 4. 按类型删除 ```bash # 删除所有跟踪的.txt文件 git clean -f "*.txt" # 删除目录下的跟踪文件 git clean -f src/ ``` ### 详细解释 1. **`git clean -f`** - `-f` (force):强制删除,无此参数 Git 会拒绝操作 - 仅删除工作目录中跟踪文件(不包括目录) 2. **`git clean -fd`** - `-d`:同时删除跟踪的目录 - 示例:清理编译生成的 `dist/` 目录 3. **`git clean -fx`** - `-x`:包括被 `.gitignore` 忽略的文件 - 使用场景:清除所有生成文件(包括忽略的缓存) 4. **交互模式 (`-i`)** - 安全选择要删除的文件 - 操作选项: ``` Would remove the following items: build.log temp/output.tmp *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help ``` ### 安全操作流程 ```bash # 1. 检查将要删除的文件 git clean -dn # 2. 创建备份(可选) git stash save --include-untracked "backup before clean" # 3. 执行删除 git clean -fd # 4. 验证结果 git status ``` ### 永久忽略特定文件 在 `.gitignore` 文件中添加规则: ``` # 忽略所有.log文件 *.log # 忽略特定目录 temp/ ``` ### 注意事项 1. `git clean` 永久删除文件(不可通过 Git 恢复) 2. 删除前务必使用 `-n` 或 `-d` 参数预览 3. 重要文件先备份:`cp -r project/ project-backup/` 4. 使用 `git check-ignore -v <file>` 检查忽略规则 ### 恢复误删 如果误删重要文件: ```bash # 1. 立即停止所有 Git 操作 # 2. 使用文件恢复工具(如 testdisk、photorec) # 3. 从备份中恢复(如果有) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值