git学习日志-git文件的跟踪


在我们的工作目录下,每个文件不外乎有两种状态: 已跟踪未跟踪

  • 已跟踪,指被纳入git版本控制的文件;
  • 未跟踪,指未被跟踪的文件,工作目录中除了已跟踪的文件之外的其他所有的文件。

在克隆某一git仓库时,工作目录中的所有文件都是已跟踪文件。

文件追踪流程.png

检查文件的状态

可以通过git status命令查看哪些文件处于什么状态。

查看git状态.png

显示当前所在分支名称,没有出现任何处于未跟踪状态的新文件等信息。

现在我们在项目下创建一个新的文件,比如说创建README.md文件。然后再执行git status命令,可以看到以下结果:

查看git状态.png

可以看到新建的文件出现在Untracked files下面,它表示未跟踪的文件(git在之前的快照中没有这些文件)。

git不会自动跟踪这些未跟踪的文件,需要我们明确地告诉git“我们要跟踪这些文件”才行。

查看状态也可以使用简略模式,在git status命令后加上-s--short参数。如图:

简略模式.png

显示结果分为两列,左列指示暂存区及工作区的状态,右列指示文件。
而左列又分为两栏,左栏指示暂存区的状态,右栏指示工作区的状态。

  • 新添加但未跟踪的文件前有??
  • 新添加到暂存区的文件前有A
  • 修改过的文件前有M

跟踪新文件

使用git add命令可以开始跟踪一个文件。

如果我们想跟踪刚创建的README.md文件,我们需要运行以下命令:

git add README.md

运行完成以后再查看状态,运行git status,可以看到README.md文件已经被跟踪了,并且这个文件处于暂存状态(Changes to be committed:目录下的文件都是已暂存状态)。

查看git状态.png

如果提交的话,那么这个文件在我们运行git add时的版本将被留存在git的历史记录中。

注意:

如果git add命令后加目录参数,那么将递归地跟踪该目录下的所有文件。


暂存已修改的文件

现在我们再创建一个新文件README-CN.md,并跟踪这个文件,然后再修改这个文件。

运行git status命令,查看状态,结果显示如下:

查看git状态.png

README-CN.md文件出现在Changes not staged for commit:下面,这就说明已跟踪的文件内容发生了变化,但是还没有放到暂存区。如果想暂存这次更新,就需要运行git add命令。

注意:

git add命令应该理解为:将内容添加到下一次提交中,而不能简单的理解为:将一个文件添加到项目中

运行git add命令,将README-CN.md文件放到暂存区,现在两个文件都已经暂存了。如果此时,我们再对README-CN.md文件内容进行修改,再运行git status命令,查看结果:

查看git状态.png

会看到README-CN.md文件同时存在于暂存区和非暂存区。这是因为git只是暂存了运行git add命令时的版本,如果有修改的文件,需要再次运行git add命令把最新的版本暂存起来。


忽略文件

如果有文件不希望被git管理,那么可以创建一个名为.gitignore的文件,列出要忽略的文件模式。

.gitignore的文件的格式如下:

  • 所有空行或以#开头的行都会被git忽略;
  • 可以使用标准的glob模式(shell使用的简化了的正则表达式)匹配,会递归的应用在整个工作区中;
  • 匹配模式可以以/开头防止递归
  • 匹配模式可以以/结尾指定目录;
  • 要忽略指定模式以外的文件或目录,可以在模式前加上!取反。

注意:

glob模式是指shell中使用的简化了的正则表达式。

*匹配零个或多个任意字符;
[abc]匹配任何一个列在方括号中的字符(要么匹配一个a,要么匹配一个b,要么匹配一个c);
?只匹配一个任意字符;
方括号中如果使用短线分隔两个字符,表示所有在这两个字符范围内的都可以匹配([0-9]表示匹配所有0到9的数字);
**表示匹配任意中间目录,比如a/**/z可以匹配a/za/b/za/b/c/z等。

例如:

# 忽略所有的.a文件
*.a

# 跟踪所有的lib.a,即时在前边忽略了.a文件
!lib.a

# 只忽略当前目录下的todo文件,而不会忽略a/todo文件
/todo

# 忽略任何目录下名为build的文件夹
build/

# 忽略doc/notes.txt,但不忽略doc/server/arch.txt
doc/*.txt

# 忽略doc/目录及其所有子目录下的.pdf文件
doc/**/*.pdf

查看不同

通过git diff命令可以查看尚未暂存的文件更新了哪些内容。

查看不同

此命令是比较工作目录中当前文件和暂存区快照之间的差异,即修改后还没暂存的变化内容。

如果要查看已暂存的将要提交到下次提交里的内容,可以使用

git diff --staged

这条命令是将比对已暂存文件与最后一次提交文件的差异。


提交

暂存区的文件可以通过git commit命令进行提交,填写注释,保存退出。

在这里插入图片描述

也可以在git commit命令后加-m "注释"(注意注释要加双引号)完成提交。

如果觉得每次都要先添加到暂存区再提交很繁琐,也可以在git commit后加上-a参数,这样git会自动将所有已跟踪过的文件暂存起来一并提交,从而跳过git add步骤。


移除文件

若希望从git中移除某个文件,就必须从已跟踪文件清单中移除(也就是说从暂存区移除),然后再提交。

手动删除文件,运行git status时,会在未暂存清单(Changes not staged for commit)中看到以下信息。

手动删除文件.png

然后再使用git rm命令可以记录移除指定文件的操作。

git rm test.txt

git移除删除的文件.png

在下一次提交时,该文件就不会再被纳入版本管理了。

  • 如果希望移除以前修改过或已经在暂存区的文件时,需要加-f参数。
  • 如果希望只是将文件从暂存区移除,但仍然保留在当前工作区(只是不想让git继续追踪该文件),可以在git rm后加--cached参数。
git rm --cached test.txt

git rm命令后也可以加文件或目录名。

# 移除a目录下的所有.log文件
git rm a/\*.log

# 移除所有以.txt文件结尾的文件
git rm \*.txt

移动文件

使用git mv命令可以对文件改名。

git mv a.txt b.txt

git修改文件名.png

其实git修改文件名可以分为以下三条命令:

mv a.txt b.txt
git rm a.txt
git add a.txt
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值