美文网首页
git学习日志-git文件的跟踪

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

作者: Levi_moon | 来源:发表于2020-06-08 11:24 被阅读0次

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

    • 已跟踪,指被纳入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命令进行提交,填写注释,保存退出。

    提交写注释.png

    也可以在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
    

    相关文章

      网友评论

          本文标题:git学习日志-git文件的跟踪

          本文链接:https://www.haomeiwen.com/subject/gpfizhtx.html