Git的使用

本文最后更新于:2023年10月18日 晚上

Git 简介

Git 是一个分布式版本控制工具,最初版本由Linux之父Linus在一周之内开发完成,目的是为了解决Linux内核维护工作的代码同步(不得不感叹李纳斯简直是神啊)

Git 与其他版本控制工具的差异

  • 别的版本控制工具侧重文件内容的具体差异
  • Git 关心文件数据的整体是否发生变化,把变化的文件作快照
  • Git 并不保存这些前后变化的差异数据,而是对数据得到进行sha-1摘要,并将此结果作为数据的唯一标识和索引,若文件没有变化,Git 不会再次保存

git 使用过程

创建文件夹

git init

由于刚刚初始化,此时显示On branch master,No commits yet,nothing to commit

创建文件并修改

将文件放入暂存区

提交到本地

文件的几种状态

修改(modified)

修改了某个文件,但还没有提交保存

暂存(staged)

把已修改的文件放在下次提交时要保存的清单中

提交(committed)

该文件已经被安全地保存在本地数据库中

基本的 Git 工作流程

  • 在工作目录(working directory)中修改某些文件
  • 对修改后的文件进行快照,然后保存到暂存区域(staging area)
  • 提交更新(committed),将保存在暂存区域的文件快照永久转储到 Git 目录中

下面是工作目录,暂存区域,以及本地仓库三者之间的关系

git add

git add 命令,根据目标文件的状态不同,此命令的效果也不同

  • 可以用它开始跟踪新文件
  • 把已跟踪的文件放到暂存区
  • 还能用于合并时把有冲突的文件标记为已解决状态

告诉 Git 开始对这些文件进行跟踪

tracked 、 untracked分别标识跟踪/不跟踪。对于每个文件,都只能处于这两种状态的其中一种

几个要注意的点:

  • 已跟踪的文件是指被纳入版本控制管理的文件
  • 未被跟踪的文件是指不被纳入版本控制管理的文件
  • 要确定哪些文件当前处于什么状态,可以用 git status 命令,若是 nothing to commit (working directory clean),则标识你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过

git status

要确定哪些文件当前处于什么状态,可以用 git status 命令,若是 nothing to commit (working directory clean),则标识你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过

git diff

git status 的显示仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff 命令

  • git diff:此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
  • git diff –staged:已经暂存起来的文件和上次提交时的快照之间的差异

git ignore

写在git ignore中的文件无需纳入 Git 的管理,比如说,在目录下创建.gitignore文件,然后在文件中写入:

1
2
3
*.c    		忽略所有的c结尾的文件
!wdnmd.c 文件wdnm.c不放入忽略沐浴露
/nmsl 只忽略项目根目录下的 nmsl文件,子目录下的nmsl文件不受影响

git clone

git clone命令可以复制一个现有仓库,且仓库中包含所有的历史版本

下面是几个常用的实际情景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
通过HTTPS的方式
$ git clone https://github.com/richardchien/modern-cmake-by-example.git

通过ssh的方式
$ git clone git@github.com:richardchien/modern-cmake-by-example.git

通过ssh的方式,并且将本地的目录名命名为 wdnmd
$ git clone git@github.com:richardchien/modern-cmake-by-example.git wdnmd

通过ssh的方式,且要克隆的是某个服务器上的git目录仓库
$ git clone user@server:/path.git




git commit

  • 直接输入git commit,这种方式会启动文本编辑器以便输入本次提交的说明,编辑器是Vim
  • git commit -m “xxxx”,这种方式表示本次提交说明是引号中的xxx
  • git commit -a -m ‘xxxx’ 这种方式跳过git add的过程直接将所有文件加入到暂存区然后提交

git log

该命令会打印出所有的提交历史,会按提交时间列出所有的更新,最近的更新排在最上面,每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明

1
$ git log -p -2

-p 选项展开显示每次提交的内容差异
-2 则仅显示最近的两次更新:

git push

git push 是用来将本地仓库中的数据推送到远程仓库

如果要把本地的 master 分支推送到 origin 服务器上,可以使用以下语句:

1
git push [remote-name] [branch-name]

git 分支

//TODO

思维导图

该图来自微信公众号:绯浅yousa

Git资料推荐

网页在线资料

书籍

  • Github入门与实践
  • Git团队协作

可视化的 Git 在线学习网站

https://eagain.net/articles/git-for-computer-scientists/


Git的使用
http://gls.show/p/3645f6a9/
作者
郭佳明
发布于
2023年10月18日
许可协议