Git 学习记录2:完整的提交一次修改

2021/08/10 Git 学习记录 共 3106 字,约 9 分钟

Git 学习记录2

目录

  1. Git 学习记录2
    1. 记录每次更新到仓库
      1. 检查当前文件状态
      2. 跟踪新文件(就是添加一个新文件让git知道)
      3. 提交更新
      4. 跳过使用暂存区域
    2. 查看提交历史
      1. 一般使用方法
      2. 介绍几个最常用的选项
      3. 检查当前文件状态,忽略,移除,移动文件
        1. 检查当前文件状态
        2. 忽略文件
        3. 移除文件
        4. 移动文件
    3. 在windows上使用git-bash.exe 的一些需要注意的点

记录每次更新到仓库

staged 是暂存区,你修改文件的地方是工作区。 对于Git来说。他知道的地方一般是暂存区,modified和unmodified。这个就是已跟踪;他不知道的地方就是untracked(一般指的是工作区,就是你修改文件的地方) 。这个叫做未跟踪

检查当前文件状态

$ git status

跟踪新文件(就是添加一个新文件让git知道)

$ git add 文件名字.文件后缀
# 比如
$ git add README.md # 这就是添加一个readme.md的文件让git跟踪

这个指令只是把文件上传到了git的暂存区。我们回到上面的文件状态变化周期图片,可以看到git跟踪的有三个状态。如果文件到了暂存区(stacked), 还需要变为modified,就是确认文件修改,这个版本已经不变了。

提交更新

现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。 这些已修改但未暂存的文件只会保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令

$ git commit 

这个命令之后,会跳出你选择的编辑器,输入commitment,如果前面没有做修改,默认就是vim编辑器。

跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,

给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤

以上两个主要命令(add 和 commit)就可以完成在本地文件的修改,然后提交到git暂存区,在确认修改的步骤了。


查看提交历史

用来看你每次提交的修改(modified)的内容

一般使用方法

$ git log

介绍几个最常用的选项

  • 其中一个比较有用的选项是 -p 或 –patch

它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交

$ git log -p -2
  • 你想看到每次提交的简略统计信息,可以使用 –stat 选项:
    $ git log --stat
    
  • –since 和 –until 这种按照时间作限制的选项很有用。 例如,下面的命令会列出最近两周的所有提交:
    $ git log --since=2.weeks
    

检查当前文件状态,忽略,移除,移动文件

检查当前文件状态

如果直接在仓库下,使用以下git命令

$ git status

会列出仓库中所有文件的状态。 比如:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    README

nothing added to commit but untracked files present (use "git add" to track)

上述表示README文件处在没有进入暂存的状态(unstacked),如果要提交到暂存区就得用git add来让git知道这个文件。 一般来讲建立一个新文件都是这样的状态。

忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。 来看一个实际的 .gitignore 文件的内容:

$ cat .gitignore # 在git bash中输入这个,表示建立一个.gitignore文件的意思
# 然后输入以下内容
*.[oa]
*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就为你的新仓库设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。

  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。

  • 匹配模式可以以(/)开头防止递归。

  • 匹配模式可以以(/)结尾指定目录。

  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(**)表示匹配任意中间目录, 比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

我们再看一个 .gitignore 文件的例子:

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

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

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

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

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

移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作, 并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。 比如

$ git rm PROJECTS.md

这个意思就是移除PROJECTS.md文件的意思。

移动文件

如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。要在 Git 中对文件改名,可以这么做:

$ git mv file_from file_to

举个例子

$ git mv README.md README1.md

其实,运行 git mv 就相当于运行了下面三条命令:

$ mv README.md README1.md
$ git rm README.md
$ git add README1.md

在windows上使用git-bash.exe 的一些需要注意的点

  1. cd的路径 因为windows在文件的属性里面给出的路径和Linux的路径不太一致。比如反斜杠和斜杆的问题。建议在路径名上直接加双引号。

  2. 退出vim编辑器 因为设置的编辑器是vim(如果要修改编辑器,请回到第一章的入门介绍,有相关内容),提交commit时,跳出的的vim编辑器,需要确认推出,先按ESC,然输入 “wq” + Enter 键,即可退出。

  3. 每次git log 最醒目的记录就是你输入的commitment,所以每次写commitment的时候尽量记录详细一些,不要偷懒。

文档信息

Search

    Table of Contents