Git 基础知识——您唯一需要的介绍!
版本控制系统
Git
入门
证书
处理文件
合作
偏僻的
信息
变化
注意事项
想要更多吗?
这篇文章取自我的博客,因此请务必查看以获取更多最新内容。
Git 是一个版本控制系统(VCS),想必所有程序员都耳熟能详。它能让你更轻松、更直观地管理项目、文件及其更改。然而,由于它庞大而复杂,编程新手学习起来可能会有些困难。设置仓库很容易,但之后的操作可能会有点棘手。因此,在今天的文章中,我们将从头开始讲解 Git 的基本概念和功能!我们将探索你在日常工作中充分利用 Git 所需的一切知识。现在就开始吧!
版本控制系统
让我们首先了解 Git 背后的最基本概念,一个经常被忽略的概念——版本控制系统 (VCS)。它是什么?为什么 Git 只是 Git 众多实现之一?为了简单起见,我们假设您正在创建一个只有一个文件的项目。在这种情况下,版本控制可以帮助您记录和存储对文件所做的更改。每次更改文件并保存时,您都会提交更改。VCS 还允许您为更改添加注释,以保持内容井然有序,并在之后了解您希望将文件恢复到发生更改之前的状态。
因此,描述整个过程中的更改,以便您稍后可以回顾——很简单。但是,假设您想和朋友一起开发项目。由于您只有一个文件需要处理,并且需要在不同时间进行操作,管理这样的开发可能会有点麻烦。别担心——VCS 也可以帮到您!它有助于跟踪特定用户在一段时间内对特定文件所做的更改,以便您稍后决定如何在称为合并的过程中将它们合并为一个。这样,VCS 就可以存储有关特定更改的数据、提交时间以及执行更改的用户。
上面介绍的概念是版本控制系统 (VCS) 背后的最基本理念。它正是 Git 和其他类似工具的核心实现。当然,Git 还存储着许多其他数据,但我希望你已经理解了它的含义。
Git
现在,让我们回到 Git 本身。正如我提到的,它是目前最流行、使用最广泛的版本控制系统 (VCS) 之一。它的流行无疑是源于其一些最重要的优势。首先,它是分布式的,这意味着你实际上不需要网络连接,只需在本地机器上运行 Git。这完全归功于它的架构和性能。顺着我们的思路,我们可以发现,与其他 VCS 实现相比,Git 的使用相对容易。
入门
理论讲完了,现在是时候真正使用 Git 了。为了简单起见,我们将在本地机器上操作,所以如果你还没有安装 Git,就必须先安装。大多数 Linux 发行版通常都内置了 Git,或者你也可以从其官方网站下载(顺便查看一下文档) 。
git init projectName
cd projectName
上述命令将在指定的目录中初始化 Git 项目projectName
(如果不存在,则会创建)。如果您未指定任何名称,则将在当前目录中创建 Git repo。完成所有操作后,我们就可以进入项目了!
在继续之前,我想先声明一下。事实上,在实际项目中,Git 项目通常存储在GitHub 等带有GUI Web 客户端的平台上,或者像GitKraken这样的平台上。不过,为了简单起见,我们在这里只使用命令。因为我认为这是掌握基本概念和相关命名的最简单方法。同样的道理以后也可以应用到 GUI 工具上,这些工具只会让事情变得更简单。
证书
如前所述,Git 存储了提交更改的用户信息。但是,为此,它需要一些关于贡献者的额外信息。因此,在开始处理任何文件之前,我们首先必须设置凭据——大多数情况下,姓名和电子邮件就足够了。
git config --global user.name "User"
git config --global user.email "user@user.com"
通过上述命令,我们可以全局设置我们的姓名和电子邮件地址,这意味着它将用于我们在本机上进行的任何提交。user.name
设置用户姓名(一个用于在线使用)及其user.email
公共电子邮件地址。话虽如此,git config
命令通常用于设置 Git 内部使用的各种变量,但在这里(大多数情况下),我们只需要姓名和电子邮件地址即可。
处理文件
假设你已经拥有或刚刚创建了一个包含内容的新文件,并希望将其提交到 Git 仓库。你可以按照以下步骤操作:
git add .
使用上述命令,我们将所有文件(您可以指定整个目录或逐个文件)添加到某个容器中,即暂存更改,以便 Git 注意到它们已被更改——创建、更新或删除。此步骤通常由内置 Git 支持的现代代码编辑器(例如 VS Code)自动管理。您必须知道,我们的更改尚未提交。目前,Git 只知道它们已被创建。要真正提交它们,也就是保存到我们的 Git 仓库历史记录中,我们必须使用另一个命令:
git commit -m "Commit message"
该git commit
命令不需要将任何文件或目录作为参数,因为它们在之前的 add 命令中已经已知。相反,我们可以在这里传递一些关于当前提交本身的附加信息。在这个例子中,我使用了许多有用的选项之一(太多了,无法一一介绍)- -m
( message ) 来实际向我的当前提交添加一些文档,就像我们之前讨论过的一样。一个不错的技巧是,如果您要写一些长消息,可以使用多个 -m 选项,因为它们将被连接成单独的段落。但是,这无疑是 GUI 让事情变得更容易的一个例子。
合作
虽然使用 Git 确实能帮你追踪个人项目,但它的真正威力在协作中才能体现出来。GitHub 和其他 Git 平台上有无数的开源项目,就是很好的例子。让我们看看它是如何运作的……
分支
多人协作处理同一个项目时,难点在于如何管理重叠的变更,同时又不互相干扰。Git 也为此提供了一个解决方案——它叫做“分支”!
分支,将 Git 视为一棵树,帮助人们拥有各自独立的版本进行工作。分支可以相互依赖,主分支称为“master” ,在第一次“无分支”提交后创建。
git branch -c my-branch
您可以使用命令并添加一些附加选项来管理分支git branch
。例如-c
, 、-m
、-d
分别代表复制、移动和删除。前两个选项使命令接受两个参数,默认使用当前分支。如果您出于任何原因想要一个全新的分支,则无需使用任何附加选项。
结账
创建新分支后,您必须“移动”到指定分支,才能将您从现在开始提交的所有操作应用到该分支。要将当前分支更改为其他分支,您需要使用git checkout
命令。
git checkout my-branch
合并
最后,多人修改需要合并到一起。为此,Git 提供了一个直观的命令 - git merge
。只需简单调用,即可将指定分支与当前分支合并。为了简化此过程,Git 会在每次文件更改发生冲突时询问您,如果不需要,则会自动继续。
git merge my-branch
偏僻的
虽然 Git 在本地运行良好,但在协作工作时,需要将仓库存储在每个项目协作者都可以访问的地方,以简化开发过程。为此,您需要一个远程仓库,存储在您的 Git 服务器或 GitHub 或 GitLab 等平台上。
克隆
访问远程仓库最常见的方式是克隆。为此,您可以使用众所周知的git-clone
命令。
git clone https://github.com/vuejs/vue.git
这样的命令会自动创建所有远程分支并检出主分支(通常名为“master”)。
偏僻的
如果您想更多地使用遥控器,您可以使用远程命令。
git remote
如果不提供其他子命令或选项,远程命令将列出所有远程来源的名称,例如,克隆后,唯一可访问的远程名称是“origin”。
如果您想将给定的远程仓库添加到某个现有仓库,而不是直接克隆它,您可以使用git remote add
命令。只需为新远程仓库指定一个简称和它的原始 URL 即可!
git remote add vue https://github.com/vuejs/vue.git
推拉
要访问远程数据,您需要先获取它。一个简单的命令是git fetch
。
git fetch
您可以传递要获取的远程源的名称作为参数。默认情况下,它等于"origin"。
通过使用git fetch
,您可以检索其他协作者提交的更改和分支。然后,您(很可能)需要使用 将其与您自己的本地更改合并git merge
。事实证明,这非常常见,因此 Git以 命令的形式提供了一个快捷方式git pull
,它会自动获取远程分支并将其与您当前的本地分支合并。
git pull
如果无法将更改应用到远程源,那么访问远程源就毫无意义。要将更改从当前分支推送到远程分支,可以使用git push
命令。
git push origin master
git push
接受两个参数 - 第一个参数通过名称指向远程源,第二个参数选择远程源的分支来推送更改。很简单吧?
我个人认为,对于初学者来说,开始使用远程 Origin 可能会有点困难。重要的是要清楚区分远程和分支,虽然一开始可能有点难。但请记住,远程就是……远程的,并且包含分支。
变基
如果您已在本地副本上进行过多次提交,则可能需要将所有提交应用到当前代码库,因为其他协作者在此期间对该代码库进行了更改。这时,git rebase
命令就派上用场了。它会将您在指定分支(默认为当前分支)中所做的所有提交重新归档,并将它们应用到主分支之上。
git rebase
信息
我们知道 Git 除了文件之外还存储了大量数据,那么,如何访问这些数据呢?Git 也为此提供了许多实用的命令!其中最重要的一个可能是git status
。使用它,你可以获取Git 仓库当前状态的基本信息,例如当前暂存的文件。你还可以传递路径(文件或目录)作为参数来限制结果。
git status
git log
另一方面,它会输出所有更改的历史记录。其中包括一些重要的数据,例如提交 ID,这些数据在以后会非常有用。由于此命令可能非常庞大,您可以随时传递可选的 path 参数来限制结果。
git log
当你能够访问前面提到的提交 ID 或分支名称等信息时,你可以使用git diff
命令来显示当前工作树与给定实体之间的实际差异。它非常有用,所有 Git GUI 工具都使用它。
git diff my-branch
最后,除了分支、提交和远程仓库之外,Git 还提供了标签。与分支不同,标签并非用于处理并发工作流,而是用于记录项目的既定状态。它对于标记代码库的不同构建、版本和发布版本非常有用。标签可以自定义名称,可以与当前工作树区分开来,git diff
也可以在当前工作树中创建git tag
。
git tag custom-tag
变化
储藏
当然,除了上面提到的添加、存储和检索信息的所有优点之外,Git 还允许您执行更多操作。这包括诸如删除和编辑之类的常见更改,以及创建存储。您可以通过git stash
命令使用它们。它们允许您创建当前工作(WIP)的临时记录,以便稍后返回。
git stash
上面最基本的命令会创建一个新的存储,稍后可以通过以下命令查看:
git stash list
要恢复指定的存储(即使是在不同的提交之上),您需要使用git stash apply
命令并通过引用 ID、完整的 reflog 语法或其他方式指定存储(请参阅文档)。有关存储引用和 ID 的信息,您需要查看命令的输出git stash list
。
git stash apply stash@{0}
# the same as
git stash apply 0
总的来说,存储区提供了一种创建当前工作流程“脏”快照的好方法,以便稍后再使用。它们还可以进行广泛的操作,正如我们上面的命令所揭示的,我们只是触及了皮毛。
重置并恢复
当然,对文件的更改,甚至删除操作,都可以(使用git add
)以可预测的方式正常暂存并提交。但是,你最终可能会遇到需要更改 Git 本身的某些方面(而不是更改文件)的情况。我的意思是,例如,想要取消暂存已暂存的更改或类似操作。
最简单的方法就是将文件重置到之前的状态,也就是在过程中取消暂存。为此,我们将使用git reset
命令来取消所有当前暂存的更改。当然,你也可以为它提供一个路径形式的参数,以使你的操作更加集中,或者提供一个提交 ID 来将文件重置到指定状态。
git reset
Git 的另一个实用之处是,当你需要回到过去并撤销一些之前做过的提交时。Obviousgit revert
命令允许你通过指定提交 ID 来执行此操作。然后,它会引导你完成撤销冲突内容的整个过程(可选)。
git revert fc95eb54362878829042ac2c6b3a34bd208b2c04
# example commit ID
只需记住,提交会分别存储对不同文件所做的更改——包括不同代码行 (LOC) 的位置和其他详细信息。这样,即使在此期间进行了更多次提交,撤销特定提交仍可能导致文件与之前不同。
注意事项
通过快速介绍 Git 基础知识,我想指出 2 个我认为非常重要的有关 Git 的细节。
首先,你需要知道,与许多其他 VCS 实现相比,Git 更关注内容而不是文件。这意味着 Git 对代码的感知能力更强。它不仅跟踪文件的位置,还跟踪文件内部代码行的位置。在使用 Git 时,这通常是理所当然的,但你必须知道,这只是一个非常有用的附加功能。
其次,你不应该将 Git 以及任何其他版本控制系统仅仅视为一种备份。当然,它们允许你存储文件的过去版本,但正是这些更改存储方式的精确性才使得版本控制系统独一无二。你可以知道是谁、为什么以及何时进行了这些更改。这使得 Git 更像是一种日志,而非单纯的备份。
想要更多吗?
Git 是一个设计精良、引人入胜的版本控制系统 (VCS) 实现。它对于初学者来说非常容易掌握,同时又为高级专业用户提供了丰富的功能。即便本文已经对 Git 进行了较为全面的介绍,但它仍然拥有无数的选项、命令和丰富的功能。在项目规模日益庞大的今天,VCS 已成为必需。值得庆幸的是,Git 让这一必需品变得更好、更便捷、更快速、更流畅,并成为广受欢迎的选择。
那么,你喜欢这篇文章吗?如果你想在本博客上以类似的形式或其他方式阅读更多关于 Git 的文章,请在下方留言。也请在下方的评论区留下你的想法。一如既往,如果你觉得这篇文章有用,请分享,并考虑在 Twitter和Facebook 上关注我 ,以及查看我的个人博客。感谢阅读,祝你拥有美好的一天!
文章来源:https://dev.to/areknawo/git-basics-the-only-introduction-you-ll-ever-need-6d2