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