学习笔记| git深入浅出 Part2_Git基础

Git专题

学习笔记| git深入浅出 Part1_快速操作指南
学习笔记| git深入浅出 Part2_Git基础

基础认知

Git 有三种状态,文件可能处于其中之一:

  • 已提交(committed)
    表示数据已经安全的保存在本地数据库中
  • 已修改(modified)
    表示修改了文件,但还没保存到数据库中
  • 已暂存(staged)
    表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中

由此引入 Git 项目的三个工作区域的概念:

  • Git 仓库(Repository)
    Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
  • 暂存区域(Staging Area)
    暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作“索引”,不过一般说法还是叫做暂存区域。
  • 工作目录(Working Directory)
    工作目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或是修改。
    git area

基本的 Git 工作流程

  1. 工作目录中修改文件
  2. 暂存文件,将文件的快照放入暂存区域
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录

基本的 提交流程

  1. git add .
  2. git commit -m 'your message'
  3. git push -r
  4. git push

命令解析

提交删除文件

  • git commit -a
    跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
  • git rm
    从Git中移除某个文件,并从工作目录中删除指定文件[⚠️注意]
  • git rm --cached FILENAME
    从Git中移除某个文件,但保留在当前工作目录中
  • git rm log/\*.log
    此命令删除 log/ 目录下扩展名为 .log 的所有文件
  • git rm \*~
    此命令删除所有以 ~ 结尾的所有文件
  • git mv FILE_FROM FILE_TO
    对文件改名,事实上运行 git mv 就相当于运行了下面三条命令:
mv FILEA FILEB
git rm FILEA
git add FILEB 

查看提交历史

  • git log
    按提交时间列出所有的更新,最近的更新排在最上面
  • git log -p [num]
    列出所有的更新,并显示每次提交的内容差异,加入参数 num 则仅显示最近的 num 次提交
  • git log --stat
    列出所有的更新,并显示每次commit的变化以及简略的统计信息,如所有被修改过的文件/有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了,在每次提交的最后还有一个总结。
  • git log --pretty=[param]
    可以指定使用不同于默认格式的方式展示提交历史。
1. oneline 将每个提交放在一行显示,查看提交数很大时非常有用
2. short 
3. full 
4. fuller 
5. format 可以定制要显示的记录格式

上面只是简单介绍了一些 git log 命令支持的选项,更多可以参考 git log常用选项,介绍了它们是如何影响log命令的输出的。

撤销操作

  • git commit --amend
    提交暂存区中的文件,例如在漏掉几个文件没有添加或提交信息写错了时,可以运行带有 --amend 选项的提交命令尝试重新提交。最终只会有一个提交,第二次提交将代替第一次提交的结果。
  • git reset HEAD <file>
    取消暂存的文件,将暂存区的文件撤回
  • git checkout -- <file>
    撤销对文件的修改,将文件还原成上次提交时的样子(或刚克隆完的样子,或刚把它放入工作目录时的样子)

远程仓库的使用

  • git remote -v
    列出所有远程仓库,以及需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
  • git remote add <shortname> <url>
    添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写
  • git fetch <shortname>
    可以在命令行中使用上述字符串 <shortname> 来代替整个 URL 拉取仓库中有但你没有的信息。要注意的是, git fetch 命令会将数据拉取到你的本地仓库,但它不会自动合并或修改你的当前工作,当准备好时必须手动将其合并入你的工作。
  • git pull
    将 master 分支推送到 origin 服务器
  • git remote show [remote-name]
    查看某一个远程仓库的更多信息
  • git remote rename [a] [b]
    重命名远程仓库的简写名
  • git remote rm [a]
    移除一个远程仓库

打标签

Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。

一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。

然而,附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。

  • git tag
    在 Git 中列出所有已有的标签
  • git tag -a <versiontag> -m <yourmessage>
    在 Git 中创建一个附注标签-m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息
  • git show <versiontag>
    可以看到标签信息与对应的提交信息,输出显示打标签者的信息、打标签的日期时间、附注信息,和具体的提交信息
  • git tag <versiontag>
    使用轻量标签 ,轻量标签本质上是将提交校验和存储到一个文件中,没有保存任何其他信息。创建轻量标签不需要使用各种选项,只需要提供标签名
  • git push origin [tagname]
    显示地推送标签到共享服务器上,默认情况, git push 命令并不会传送标签到远程仓库服务器上
  • git push origin --tags
    把所有不在远程仓库服务器上的标签全部传送到那里,这样其他人从仓库中 clone 或者拉取,它们也能得到你的那些标签
  • git tag -d <versiontag>
    删除本地仓库上的标签,但这个命令并不会从任何远程仓库中移除这个标签,必须使用 git push <remote> :refs/tags/<tagname> 来更新你的远程仓库

推荐阅读

git 官方文档
廖雪峰的 git 教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章