Git 版本控制系统的完整指南

什么是 Git?

Git 是一个流行的版本控制系统。它是由 Linus Torvalds 于 2005 年创建的,自那时以来由 Junio Hamano 维护。

它用于:

  • 跟踪代码更改
  • 跟踪谁做出了更改
  • 编写协作

Git 做什么?

  • 使用仓库管理项目
  • 克隆项目以在本地副本上工作
  • 使用暂存和提交来控制和跟踪更改
  • 分支和合并允许在项目的不同部分和版本上进行工作
  • 将项目的最新版本拉到本地副本
  • 将本地更新推送到主项目

使用 Git

  1. 在文件夹上初始化 Git,使其成为一个仓库
  2. Git 现在会创建一个隐藏的文件夹,以跟踪该文件夹中的更改
  3. 当文件被更改、添加或删除时,它被视为已修改
  4. 你选择要暂存的已修改文件
  5. 已暂存的文件被提交,这会促使 Git 存储文件的永久快照
  6. Git 允许你查看每个提交的完整历史。
  7. 你可以恢复到以前的任何提交。
  8. Git 不会在每个提交中存储文件的单独副本,而是跟踪每个提交中所做的更改!

切换平台:

  • 将焦点转向 GitHub
  • 将焦点转向 Bitbucket
  • 将焦点转向 GitLab

为什么使用 Git?

  • 超过 70% 的开发者使用 Git!
  • 开发者可以从世界任何地方协同工作。
  • 开发者可以查看项目的完整历史。
  • 开发者可以还原到项目的早期版本。

什么是 GitHub?

Git 不同于 GitHub。 GitHub 制作使用 Git 的工具。 GitHub 是世界上最大的源代码托管服务,并自 2018 年起由 Microsoft 拥有。 在本教程中,我们将专注于使用 Git 与 GitHub。

Git 暂存环境

Git 的核心功能之一是暂存环境和提交的概念。

当你工作时,你可能会添加、编辑和删除文件。但无论何时你达到一个重要阶段或完成工作的一部分,都应该将文件添加到暂存环境。

已暂存的文件是准备提交到你正在工作的仓库的文件。不久后,你将更多地了解提交。

目前,我们已完成了对 index.html 的工作。所以我们可以将它添加到暂存环境中:

git add index.html

文件应该已被暂存。让我们检查状态:

git status

在主分支上

尚未提交

待提交的更改:

(使用 "git rm --cached ..." 来取消暂存)

新文件: index.html

现在该文件已被添加到暂存环境。

Git 添加多个文件

你还可以一次暂存多个文件。让我们向我们的工作文件夹添加 2 个文件。再次使用文本编辑器。

一个描述仓库的 README.md 文件(推荐用于所有仓库):

markdown 复制代码
# hello-world
Hello World repository for Git tutorial
This is an example repository for the Git tutorial on https://www.w3schools.com

This repository is built step by step in the tutorial.

一个基本的外部样式表(bluestyle.css):

css 复制代码
body {
background-color: lightblue;
}

h1 {
color: navy;
margin-left: 20px;
}

并更新 index.html 以包括样式表:

html 复制代码
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>

</body>
</html>

现在将当前目录中的所有文件添加到暂存环境:

bash 复制代码
git add --all

使用 --all 而不是单个文件名将会将所有更改(新文件、修改过的文件和已删除的文件)都暂存。

bash 复制代码
git status

在主分支上

尚未提交

待提交的更改:

(使用 "git rm --cached ..." 来取消暂存)

新文件: README.md

新文件: bluestyle.css

新文件: index.html

现在所有 3 个文件都已添加到暂存环境中,我们准备进行第一次提交。

如何添加新文件到 Git 仓库:从创建本地仓库到添加文件

添加 Git 新文件

你刚刚创建了你的第一个本地 Git 仓库。但它是空的。

所以让我们添加一些文件,或使用你喜欢的文本编辑器创建一个新文件。然后保存或移动它到你刚刚创建的文件夹中。

在这个示例中,我将使用一个简单的 HTML 文件,类似于这样:

html 复制代码
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>

然后将它保存到我们的新文件夹中,命名为 index.html

让我们回到终端并列出当前工作目录中的文件:

bash 复制代码
ls
index.html

ls 会列出目录中的文件。我们可以看到 index.html 存在。

然后我们检查 Git 的状态,看它是否是仓库的一部分:

bash 复制代码
git status

在主分支上

尚未提交

未跟踪的文件: (使用 "git add ..." 来将其包含在将要提交的内容中) index.html

没有添加到提交但未跟踪的文件存在(使用 "git add" 来跟踪)

现在 Git 已经意识到这个文件了,但还没有将它添加到我们的仓库中!

Git 仓库文件夹中的文件可以处于以下 2 种状态之一:

  • 已跟踪 - Git 已知道的文件,并已添加到仓库
  • 未跟踪 - 存在于你的工作目录中,但尚未添加到仓库

当你首次将文件添加到空仓库时,它们都是未跟踪的。要让 Git 跟踪它们,你需要将它们暂存,或者将它们添加到暂存区。

我们将在下一章中介绍暂存区。

Git 提交

既然我们已经完成了工作,我们准备从暂存转到提交我们的仓库。

添加提交可以跟踪我们的进度和更改。Git 将每个提交视为更改点或"保存点"。如果你发现 bug 或想要做更改,它是项目中可以返回的一个点。

当我们提交时,应该始终包含一条消息。

通过为每个提交添加清晰的消息,对于自己(和其他人)来说,很容易看到发生了什么以及何时发生的。

bash 复制代码
git commit -m "Hello World 的首次发布!"
[master (root-commit) 221ec6e] Hello World 的首次发布!
 3 files changed, 26 insertions(+)
 create mode 100644 README.md
 create mode 100644 bluestyle.css
 create mode 100644 index.html

commit 命令执行提交,-m "message" 添加一条消息。

已暂存环境已被提交,消息是:"Hello World 的首次发布!"

不经过暂存提交

有时,当你进行小的更改时,使用暂存环境似乎是浪费时间。可以直接提交更改,跳过暂存环境。-a 选项会自动将每个已跟踪的更改文件添加到暂存区。

让我们对 index.html 进行小更新:

html 复制代码
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>

</body>
</html>

并检查我们仓库的状态。但这次,我们将使用 --short 选项以更紧凑的方式查看更改:

bash 复制代码
git status --short
 M index.html

注意:短状态标志是:

  • ?? - 未跟踪的文件
  • A - 已添加到暂存
  • M - 修改过的文件
  • D - 已删除的文件

我们看到我们预期的文件已被修改。所以让我们直接提交它:

bash 复制代码
git commit -a -m "用新行更新了 index.html"
[master 09f4acd] 用新行更新了 index.html
 1 file changed, 1 insertion(+)

注意:通常不建议跳过暂存步骤。

跳过暂存步骤有时会导致包含不需要的更改。

Git 提交日志

要查看仓库的提交历史,可以使用 log 命令:

bash 复制代码
git log

这将显示仓库的提交历史:

bash 复制代码
commit 09f4acd3f8836b7f6fc44ad9e012f82faf861803 (HEAD -> master)
Author: w3schools-test 
Date:   Fri Mar 26 09:35:54 2021 +0100

    用新行更新了 index.html

commit 221ec6e10aeedbfd02b85264087cd9adc18e4b26
Author: w3schools-test 
Date:   Fri Mar 26 09:13:07 2021 +0100

    Hello World 的首次发布!

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关推荐
极小狐27 分钟前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab
极小狐34 分钟前
极狐GitLab 如何 cherry-pick 变更?
人工智能·git·机器学习·gitlab
丘山子36 分钟前
一些鲜为人知的 IP 地址怪异写法
前端·后端·tcp/ip
CopyLower1 小时前
在 Spring Boot 中实现 WebSockets
spring boot·后端·iphone
天天扭码2 小时前
总所周知,JavaScript中有很多函数定义方式,如何“因地制宜”?(ˉ﹃ˉ)
前端·javascript·面试
.生产的驴2 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
景天科技苑2 小时前
【Rust】Rust中的枚举与模式匹配,原理解析与应用实战
开发语言·后端·rust·match·enum·枚举与模式匹配·rust枚举与模式匹配
追逐时光者3 小时前
MongoDB从入门到实战之Docker快速安装MongoDB
后端·mongodb
天天扭码3 小时前
深入讲解Javascript中的常用数组操作函数
前端·javascript·面试
方圆想当图灵3 小时前
深入理解 AOP:使用 AspectJ 实现对 Maven 依赖中 Jar 包类的织入
后端·maven