首页
  • 监控

    • grafana
    • prometheus
  • 学习笔记

    • 《核心系统命令实战》
    • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
    • 《Ansible权威指南》
  • 博客搭建
  • git
  • python
  • 友情链接
  • 文档编写规范
  • 我用过的电脑
  • 喷涂相关
  • 每日一溜
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小刘说

砥砺前行
首页
  • 监控

    • grafana
    • prometheus
  • 学习笔记

    • 《核心系统命令实战》
    • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
    • 《Ansible权威指南》
  • 博客搭建
  • git
  • python
  • 友情链接
  • 文档编写规范
  • 我用过的电脑
  • 喷涂相关
  • 每日一溜
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 软考中级

  • 博客搭建

  • git

    • git简介&安装
    • git基本命令
      • git运行前的配置
        • 用户信息
        • 检查配置信息
      • git初始化
      • 三种状态
      • 提交到仓库的过程
        • 检查当前文件状态
        • 精简显示
        • 跟踪(add)新文件
        • 忽略文件
        • 取消暂存的文件
        • 查看修改的部分
      • 提交(commit)
        • 跳过暂存区提交
        • 查看提交记录
        • 修改提交记录
        • 从提交记录中恢复文件
      • 打标签(tag)
        • 附注标签(annotated)
        • 轻量标签(lightweight)
        • 给提交记录打标签
        • 共享标签
        • 删除标签
        • 检出标签?
    • git分支
    • git上传文件过大报 413
  • 专题
  • git
小刘
2022-04-22
目录

git基本命令

# git基本命令

# git运行前的配置

# 用户信息

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
1
2

# 检查配置信息

也可以通过以下命令来查询当前已配置的git信息以及文件位置。

git config --list --show-origin
1

每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

# git初始化

如果你有一个尚未进行版本控制的目录,想要用 Git 来控制它,那么首先需要进入该目录中。

cd git_test/
git init
1
2

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。非必要情况下请不要变更此文件夹的内容。

# 三种状态

现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。

已修改(modified) 表示修改了文件,但还没保存到数据库中。

已暂存(staged) 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

已提交(committed) 表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录(仓库)。

工作区、暂存区以及 Git 目录。

# 提交到仓库的过程

每当完成了一个阶段的更改,想要将记录下它时,就将它提交到仓库。

工作目录(Working Directory) 下的每一个文件都不外乎这两种状态:已跟踪(track) 或 未跟踪(untracked)。

已跟踪(track):已经版本控制的文件,在上一次快照中有它们的记录。

未跟踪(untracked):工作目录(Working Directory)中除已跟踪文件外的其它所有文件都属于未跟踪文件。

# 检查当前文件状态

可以用 git status 命令查看哪些文件处于什么状态。 如果在初始化仓库后执行此命令,会看到类似这样的输出:

On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
1
2
3
4
5

当前分支为 master ,没有提交记录。

# 精简显示

git status 命令的输出十分详细,但比较繁琐。使用 git status -s 命令或 git status --short 命令,你将得到一种 格式更为紧凑的输出。

AM README.md
MM Rakefile
?? 1
1
2
3

A:新添加到暂存区中的文件。

M:修改过的文件。

??:新添加的 未跟踪(untracked) 文件。

Rakefile 文件已修改,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分。

# 跟踪(add)新文件

这个时候我们新建一个 README.md ,再次执行 git status ,输出:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	README.md

nothing added to commit but untracked files present (use "git add" to track)
1
2
3
4
5
6
7
8
9

此时 README.md 文件就处于 **未跟踪(untracked)**的状态。如果要跟踪 README.md ,执行:

git add README.md
1

再次执行 git status ,输出:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   README.md
1
2
3
4
5
6
7

出现 Changes to be committed ,之后的文件就说明是 已暂存(staged) 状态。文件已存到暂存区。等待提交。

中途如果我们修改 README.md ,再次执行 git status ,发现会多出来几行:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   README.md
1
2
3
4

出现 Changes not staged for commit ,说明文件内容已变化,但并未存到暂存区。可以重新运行 git add 把最新版本重新暂存起来。

# 忽略文件

创建一个名为 .gitignore 的文件,列出要忽略的文件。

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

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

下面是一个 .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
1
2
3
4
5
6
7
8
9
10
11
12

访问 gitignore (opens new window) 获取各个项目以及语言的 .gitignore 。

# 取消暂存的文件

例如,你已经修改了两个文件并且想要将它们作为两次独立的修改提交, 但是却意外地输入 git add * 暂存了它们两个,输入:

git restore --staged <file>
1

可以从暂存区中删除文件。

# 查看修改的部分

git diff 使用较少,可忽略。

# 提交(commit)

确定你要保存的文件都已经存到暂存区后,执行:

git commit
1

出现以下内容:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
#       new file:   README.md
#
# Changes not staged for commit:
#       modified:   README.md
#
1
2
3
4
5
6
7
8
9
10
11
12
13

在文件中输入你想提交的信息,保存并退出,一次commit就已经完成了。

也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行:

git commit -m "第一次提交"
1

# 跳过暂存区提交

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

git commit -a -m "第二次提交"
1

# 查看提交记录

进行了多次提交后,如果想查看提交记录,使用以下命令:

git log
1

# 修改提交记录

如果提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了,可以通过添加 --amend 的参数来重新提交:

git commit --amend
1

例:发现提交的信息写错了或者少提交了文件,可以通过以下命令进行再次提交:且 第二次提交 将代替 第一次提交 的结果。

git commit -m "第二次提交"
git add 1
git commit -m "第二次提交" --amend
1
2
3

# 从提交记录中恢复文件

如果文件被你修改的乱七八糟的,可以从上次的提交记录中恢复文件。例如我想恢复 README.md :

git checkout -- README.md
1

要确保文件不在暂存区中。已经在暂存区的文件是无法恢复的。

# 打标签(tag)

Git 可以给仓库历史中的某一个提交打上标签。记录重要的节点或者更新。

git tag # 查看所有标签
1

Git 支持两种标签: 轻量标签(lightweight) 与 附注标签(annotated)。

轻量标签(lightweight):在某一次提交进行打标签。

附注标签(annotated):存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的 名字、电子邮件地址、日期时间, 此外还有一个标签信息。

# 附注标签(annotated)

git tag -a v1.0 -m "version 1.0"
1

# 轻量标签(lightweight)

git tag v1.0
1

# 给提交记录打标签

可以给已经提交的记录进行打标签。执行 git log --pretty=oneline 查看提交历史:

28178e47377b6c7f613ea3af7a2b6619de44fa80 (HEAD -> master, tag: v1.1, tag: v1.0) 第三次提交
b982f67c9d2c6efb23fa5b11ef9edabc1a2d7a53 (lgxblog/master) 第二次提交
754086a63c6abcb71382c12d7f29f076a8377810 第一次提交
1
2
3

给 “第一次提交” 打标签:

git tag -a v0.9 -m "version 0.9" 754086a63c6abcb71382c12d7f29f076a8377810
1

执行 git show v0.9 查看记录,发现已经打上标签了。

# 共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。执行 git push origin <tagname> 把标签推送到远程服务器上。

# 删除标签

删除本地仓库的标签,执行 git tag -d <tagname> 。

# 检出标签?

查看标签指向的提交?......具体解释项需要在分离头章节继续讲解。

上次更新: 2024/05/11, 03:55:33

← git简介&安装 git分支→

最近更新
01
kubernetes控制器-Service
08-18
02
kubernetes控制器-Deployment
08-08
03
kubernetes调度基础
07-27
更多文章>
Theme by Vdoing | Copyright © 2023-2024 本站支持IPv6访问 本站支持SSL安全访问
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式