Git 和 GitHub 教程——版本控制入门

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列

Learn to Code RPG 是一个完全开源免费的项目,你将在其中自学编程,结交科技行业的朋友,并实现成为开发者的梦想。社区的志愿贡献者们正在协作翻译不同语言版本,感兴趣参与中文版翻译的朋友们可以联系小助手(微信:fcczhongguo)。欢迎大家阅读《从 freeCodeCamp 视觉小说游戏 Learn to Code RPG 学习计算机科学概念》了解详情。

Git 和 GitHub 是各个领域的开发者都应该学习的两项技术。

如果你是一个初级开发者,你可能会认为这两个术语意味着同样的事情——但它们是不同的。

本教程将帮助你了解什么是 Git 和版本控制,你需要知道的基本 Git 命令,如何使用其功能来提高工作效率,以及如何使用 GitHub 来扩展这些功能。

本指南对初学者友好,因为例子将非常容易理解。它也将是一个通用的教程,所以不管你最喜欢的编程语言是什么,你都可以跟着学。

对于我们的项目,我们将做一个写在文本(txt)文件中的待办事项清单。你将看到我们如何使用 Git 的功能来工作,并创建列表的最终版本。

你需要先准备好的

为了完成本教程,你将需要以下条件:

  • 一个命令行界面(或者说是终端)

  • 一个你喜欢的文本编辑器(我将使用 VS Code)

  • 一个 GitHub 账户

什么是 Git

Git 是一个版本控制系统,可以让你跟踪你对文件所做的修改。使用 Git,你可以恢复到文件的各种状态(就像一台时间旅行机)。你也可以制作一个文件的副本,对该副本进行修改,然后将这些修改合并到原来的副本中。

例如,你可以在一个网站的登陆页面上工作,发现你不喜欢这个导航栏。但与此同时,你可能不想开始改变它的组件,因为它可能会变得更糟。

有了 Git,你可以为该文件创建一个相同的副本,然后对导航栏进行修改。然后,当你对你的改动感到满意时,你可以把副本合并到原文件中。

你并不局限于将 Git 仅仅用于源代码文件,你也可以用它来跟踪文本文件,甚至是图像。这意味着,Git 不仅仅是为开发者服务的,任何人都可以找到它的帮助。

如何安装 Git

为了使用 Git,你必须在你的电脑上安装它。要做到这一点,你可以在官方网站 下载最新版本。你可以从给出的选项中下载适合你的操作系统。

你也可以用命令行来安装 Git,但由于每个操作系统的命令都不一样,我们将专注于更通用的方法。

如何配置 Git

我将假设此时你已经安装了 Git。为了验证这一点,你可以在命令行上运行这个命令:git --version。这将显示当前安装在你电脑上的版本。

接下来,你需要做的是设置你的用户名和电子邮件地址。Git 会使用这些信息来识别谁对文件进行了修改。

要设置你的用户名,输入并执行这些命令 : git config --global user.name "YOUR_USERNAME"git config --global user.email "YOUR_EMAIL"。请确保用你选择的值替换 "YOUR_USERNAME""YOUR_EMAIL"

如何在 Git 中创建和初始化一个项目

我们终于完成了安装和设置 Git 的工作,现在是时候创建我们的项目了。

我在桌面上创建了一个名为 Git and GitHub tutorial的文件夹。使用命令行,进入到你新项目的文件夹位置。对我来说,我将运行以下命令。:

cd desktop

cd Git and GitHub tutorial

如果你是命令行的新手,并且还在学习如何使用它来查看你的电脑文件夹,那么我建议使用微软的 Visual Studio Code。它是一个代码编辑器,有一个内置的终端来执行命令。你可以下载它这里。

安装VS Code后,在编辑器中打开你的项目,为你的项目打开一个新的终端。这将自动把终端/命令行指向你的项目的路径。

现在要初始化你的项目,只需运行git init。这将告诉 Git 准备好开始监视你的文件的每一个变化。它看起来像这样:

461ce2f2d55b20ce091d74975fbc9992.png


git init

第一行是关于我的电脑的信息和文件夹存在的路径。第二行是命令git init,第三行是发回的响应,告诉我我的仓库(repo)已经被初始化了。它被认为是空的,因为我们还没有告诉 Git 要追踪哪些文件。

仓库只是定义一个被 Git 监视/跟踪的项目的另一种方式。

Git 项目文件

我只创建了一个名为 "todo.txt "的文件。这个文件看起来是这样的:

MY TO-DO LIST1. Write an article.
2. Code.
3. Study books.
4. Attend classes on time.
5. Visit aunt.
6. Apply for remote jobs.

在我们继续学习其他 Git 命令之前,让我们先谈谈 GitHub。

什么是 GitHub

GitHub 是一个为 Git 存储库提供的在线托管服务。想象一下,你在家里做一个项目,当你不在的时候,也许是在朋友那里,你突然想起了一个代码错误的解决方案,让你几天都坐立不安。

你不能进行这些修改,因为你的电脑不在你身边。但如果你的项目托管在 GitHub 上,你就可以在你能接触到的任何电脑上用命令访问和下载该项目。然后你就可以进行修改,并将最新版本推送回 GitHub。

总之,GitHub 可以让你在他们的平台上存储你的 repo。GitHub 的另一个了不起的功能是你可以在任何地方与其他开发者进行合作。

现在我们已经在本地创建并初始化了我们的项目,让我们把它推送到 GitHub。

如果你是初学者,你会遇到一些新的术语,比如推送(push)、提交(commit)、添加(add)等等——但不要被它们吓倒,只要多加练习,你就能记住这些术语和它们的作用。

如何推送一个仓库到 GitHub

我将把本节分为几个步骤,以帮助你更清楚地了解这个过程。

第一步 - 创建一个 GitHub 账户

为了能够使用 GitHub,你必须先创建一个账户。你可以在他们的[网站](https://github.com/) 创建。

第二步 - 创建一个存储库

你可以点击页面右上角的+符号,然后选择 “New repository”。给你的版本库起个名字,然后向下滚动并点击 “Create repository”。

第三步 - 添加和提交文件

在我们添加(add)和提交(commit)我们的文件之前,你需要了解一个文件被 Git 跟踪的阶段。

已经提交的状态

当一个文件的所有修改都被保存在本地的 repo 中时,该文件就处于提交的(committed)状态。处于提交阶段的文件是可以被推送到远程 repo(在 GitHub 上)的文件。

已修改状态

处于修改(modified)状态的文件已经做了一些修改,但还没有保存。这意味着该文件的状态与之前在提交状态下的状态有了改变。

暂存状态

处于暂存(staged)状态的文件意味着它可以被提交了。在这种状态下,所有必要的修改都已经完成,所以下一步就是把文件移到提交状态。

你可以把 Git 想象成一台摄像机,这样就能更好地理解。只有当文件到达提交状态时,相机才会进行快照。在这个状态之后,相机开始比较正在对同一文件进行的修改和最后一次快照(这就是修改状态)。而当所需的修改完成后,文件就会被分阶段移动到提交状态,以便进行新的快照。

目前,这可能是一个很大的信息量,但不要气馁——随着实践的进行,它变得更容易。

如何在 Git 中添加文件

当我们第一次初始化我们的项目时,该文件没有被 Git 追踪到。要做到这一点,我们使用这个命令git add .,将添加当前目录下所有文件。如果你想添加一个特定的文件,也许是一个名为about.txt的文件,你可以用git add about.txt

现在,我们的文件已经处于暂存状态(staged state)。这条命令之后你不会得到回应,但要知道你的文件处于什么状态,你可以运行git status命令。

如何在 Git 中提交文件

文件下一个状态处于提交状态(committed state)。为了提交我们的文件,我们使用git commit -m "first commit"命令。

命令的第一部分 "git commit "告诉 Git,所有被暂存的文件都准备好提交了,所以是时候进行快照了。第二部分 -m "first commit" 是提交信息。-m是信息的缩写,而括号内的文字是提交信息。

执行这个命令后,你应该得到一个类似这样的响应:

f44e4abc42ffad6e04e68cac02964029.png


git commit

现在我们的文件已经处于提交状态(committed state)。

第四步 - 推送仓库到 GitHub

创建完仓库后,你的浏览器应该跳到一个页面,告诉你如何在本地创建一个仓库或推送一个现有仓库。

在我们的例子中,项目已经存在于本地,所以我们将使用 “.…or push an existing repository from the command line” 部分的命令。这些是命令:

git remote add origin https://github.com/ihechikara/git-and-github-tutorial.git
git branch -M main
git push -u origin main

第一个命令 git remote add origin [https://github.com/ihechikara/git-and-github-tutorial.git](https://github.com/ihechikara/git-and-github-tutorial.git),在你的本地 repo 和 Github 上的远程 repo 之间建立连接。

你的远程项目的 URL 应该与上面的完全不同。所以要根据你的实际 URL,确保你是按照步骤,用你自己的远程 repo 工作。执行这个命令后,你通常不会得到回应,但要确保你有互联网连接。

第二个命令 git branch -M main 将主分支的名字改为 "main"。默认的分支可能被创建为 "master",但 "main "是现在这个 repo 的标准名称。这里通常没有回应。

最后一个命令 git push -u origin main  将你的 repo 从本地设备推送到 GitHub。你应该得到与此类似的回应:

663c584a33d45e06dd55fe3e92548375.png


git push

为了帮助你加深对文件阶段的理解,我将对文件进行修改,然后将新版本推送到 GitHub。

回顾一下,我们的文件现在处于提交状态。让我们对文件进行修改,并注意到这些状态。

我将在待办事项列表中添加一个新任务:

MY TO-DO LIST1. Write an article.
2. Code.
3. Study books.
4. Attend classes on time.
5. Visit aunt.
6. Apply for remote jobs. 
7. Practice code

添加新任务后,运行git status命令。你应该看到这样的情况:

d02033984a3d2b8a6f383f87e18fbf23.png


git status

在对文件进行修改后,它移到了修改状态--但它还没有被分期提交,所以你还不能把它推送到 GitHub。Git 并没有对这个当前状态进行最终的快照,因为它只是将我们现在所做的修改与最后的快照进行比较。

现在我们要添加(stage)这个文件,然后提交(commit )并推送(push)它。这与上一节的做法相同。

我们首先使用git add .添加文件,它添加了当前目录下的所有文件(在我们的例子中是一个文件)。然后我们通过运行git commit -m "added new task"来提交该文件,接着是git push -u origin main

这就是将修改过的文件推送到 GitHub 的三个步骤。添加(add),提交(commit),然后推送(push)。我希望你现在理解了文件阶段和与之相关的命令。

如何在 Git 中使用分支(branch)

有了分支,你可以在不破坏原始副本的情况下,创建一个你想要处理的文件副本。你可以把这些修改合并到原始副本上,或者让分支保持独立。

在我们开始使用分支之前,我想给大家看一下我们的 repo 的可视化表示,它看起来像这样:

cfa49cb304f991eff0d6a852a8359917.png


上图显示了我们的主分支和最近的两次提交(第一次提交和添加的新任务提交)。

在这一点上,我想在列表中添加更多的任务,但我还不确定是否要把它们放在主列表中。因此,我将创建一个名为 test 的新分支,看看加入更多任务后我的列表会是什么样子。

要创建一个新的分支,运行这个命令。git checkout -b test。我将把它分开来。

checkout告诉 Git 它应该切换到一个新的分支。b告诉 Git 创建一个新的分支。test是要创建和切换到的分支的名字。以下是你应该得到的响应:

b8f765d53287f538d53fc71e220bf472.png

git checkout -b

现在我们已经创建了一个新的分支,这就是我们的 repo 的样子:

bfc8110aaa3dd607a94f0e81d3ef5171.png


git branch

我们从上次提交的状态中创建了新的分支。现在让我们为这个新分支添加更多任务。

MY TO-DO LIST1. Write an article.
2. Code.
3. Study books.
4. Attend classes on time.
5. Visit aunt.
6. Apply for remote jobs. 
7. Practice code
8. Complete internship task.
9. Practice chess openings.
10. Solve chess puzzles.
11. Check exam schedule.

我增加了四个新任务。要把新的状态合并到主分支(main branch)。你必须先把这个分支分阶段并提交,由于我们在上一节中做了两次,我就不详细介绍如何提交。

你应该自己试着做一下,这样你就会明白它是如何工作的。作为提示,先添加文件,然后带着信息提交(参考上一节的细节,告诉你如何做)。

提交完测试分支后,通过运行以下命令切换回主分支,git checkout main

你是否注意到,我们没有添加-b?这是因为我们不是在创建一个新的分支,而是切换到一个现有的分支。你可以通过运行git branch命令来检查你的 repo 中存在的所有分支。

现在,我们可以通过运行git merge test,将测试分支中的修改合并到主分支中。这时,你会看到测试分支中的所有改动都反映在主分支中。你还应该收到类似这样的回复:

952644aa72da86705d6cb109f1358398.png


git merge

下面是我们的 repo 的图示:

81750e05ac80cf950096b72d8a896ef7.png


如果你继续将你的 repo 推送到 GitHub,你会发现测试分支不会被推送。它只会保留在你的本地 repo 中。如果你想推送你的测试分支,可以用git checkout test切换到该分支,然后运行git push -u origin test

如何在 Git 中拉取一个仓库

在 Git 中拉取意味着将远程仓库的当前状态克隆到你的电脑/仓库中。当你想在不同的电脑上操作你的仓库时,或者当你在网上为一个开源项目做贡献时,这就很方便了。

要测试这一点,不用担心切换到新的电脑。只要运行cd .. 就可以离开当前目录并返回上一层目录。在我自己的例子中,我已经导航回到了我的桌面。

进入 GitHub,在你的仓库的主页上,你应该看到一个绿色的按钮,上面写着 "code"。当你点击这个按钮时,你应该在一个下拉菜单中看到一些选项。继续并复制 HTTPS URL。

之后,运行git clone YOUR_HTTPS_URL。这个命令会把远程版本库拉到你的本地电脑上,放在一个叫git-and-git-tutorial的文件夹里。就是说:

f7aa210f6a3324bc7180c07290b11b82.png


git clone

结语

本文介绍有助于你开始使用 Git 的基本命令。我们还开始学习如何使用 GitHub。

如果你已经跟到了这一步,那么恭喜你,你已经可以开始了。现在无论你使用什么编程语言,都可以在你的项目中使用 Git。

你应该知道,这些并不是 Git 中存在的所有命令,所以你可以随时做更多的研究来了解更多的命令和它们的用途。这篇文章和手册是很好的开始。这个 gist 是查看更多 Git 命令的详细列表的好地方。

祝你编程愉快!

原文链接:https://www.freecodecamp.org/news/git-and-github-for-beginners/

作者:Ihechikara Vincent Abba

译者:luojiyin

1df06e813ebe5dc843d25cb213d758d4.gif

················· 若川简介 ·················

你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
从2014年起,每年都会写一篇年度总结,已经写了7篇,点击查看年度总结。
同时,最近组织了源码共读活动,帮助3000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

cb711daf050e6a55709be8854dc98420.png

识别方二维码加我微信、拉你进源码共读

今日话题

略。分享、收藏、点赞、在看我的文章就是对我最大的支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab中的:的优先级_内容早期设计:内容优先

matlab中的:的优先级By Simone Ehrlich, Content Strategy Manager由 西蒙埃利希 ,内容策略经理 Words are cheap. Cheaper than wires; cheaper than mocks. That doesn’t mean words aren’t important, just less expensive to produce as a design asset. So …

我真的哭了,哭过后呢(-)

这些是山区的孩子们! 这是他们的教室。这个也算是!如此的师资力量自己解决吃饭问题冬天到了,一起烤烤火与泥土污水一起还好,最大的数字只是10老师抱着孩子来给我们上课了不知道山那边会是什么呢?又一双充满了渴望的大眼…

脑裂问题解决方案_从解决方案到问题

脑裂问题解决方案Once upon a time a couple of years ago, one of my mentors (and favourite people in the world) repeatedly drilled the idea above into my brain. Her advice for Product people was to “fall in love with the problem, not the solution”. At the …

Vue.js 官方团队成员霍春阳新作,深入解析 Vue.js 设计细节【文末送书】

霍春阳(Hcy),Vue.js 官方团队成员。专注于 Web 研发领域,是 Vue.js 3 的核心贡献者之一,Vue.js 文档生成工具 Vuese 的作者,技术社区活跃者,曾撰写大量颇受好评的技术博客。经过一年的准备&…

LINQ之路 5:LINQ查询表达式

书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询表达式(Query Expression)。 LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询。C# 3.0对于LINQ表达式还引入了声明式的查询表达式&#xf…

调查谋杀案以换取Obra Dinn

回顾性 (RETROSPECTIVE) I am not sure if this is intentional, but Lucas Pope has a knack for turning the mundane into something special. This was evident in his release of Papers Please. In that game, you’re a border patrolman trying to provide for your fa…

9年前的大一,我们这样为女生过37女生节【祝节日快乐】

这是一篇水文~没啥目的,若说要有,就是希望大家参加源码共读学起来。公众号后台显示所有读者朋友中大约有23%的女生。前端工程师中女生应该占比相对多些。祝关注我公众号的女生3.7女生节快乐,大部分公司明天应该都有半天假期。可以留言大学时你…

requests模块发送带headers的Get请求和带参数的请求

1.在PyCharm开发工具中新建try_params.py文件; 2.try_params.py文件中编写代码: import requests#设置请求Headers头部header {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}#请求输入参数p…

面试官问:跨域请求如何携带cookie?

大家好,我是若‍川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列本文…

ux设计中的各种地图_移动应用程序设计中的常见UX错误

ux设计中的各种地图Have you ever tried a new app, only to realize you have no idea how to use it?您是否曾经尝试过一个新的应用程序,却发现自己不知道如何使用它? Few things can transport a person from calm and happy, to frustrated and an…

如何使用 Node 后端创建 React 应用程序:完整指南

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列React…

工业仪器仪表 界面设计_如何设计时尚的仪表板界面

工业仪器仪表 界面设计重点 (Top highlight)Welcome to the second step by step UI guide. Since you really liked my first article on “How to achieve Friendly, Lightweight UI”, I decided to make another one in a similar manner. Please note, that this is not a…

给3月要跳槽的前端提个醒!不了解微前端就别去面试了,不然……

在后端架构发展史上,如果要找一个低耦合高内聚架构模式的典范,微服务当仁不让。在互联网业务急速扩张的背景下,微服务架构解决了后端服务中的“重”,让每个服务都能够独立部署、独立扩展,每个服务都具有稳固的模块边界…

ui和ux的区别_UI和UX之间的区别

ui和ux的区别You’ve probably heard a lot of self-proclaimed “UX/UI” designers out there, the word “UI” thrown around endlessly at Apple keynotes, or tech startups saying “we need to fix the UX here and the UX there.”Ÿouve可能听说过很多自称“UX / UI”…

用JS轻松实现一个录音、录像、录屏工具库

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列前言最…

文本字段和表单设计-UI组件系列

重点 (Top highlight)Forms have existed for a significant amount of time, greatly simplifying the task of drafting complaints and various other legal pleadings. With the advance of information and its processing, means to gather the data are also evolving. …

WCF 第四章 绑定 netMsmqBinding

MSMQ 为使用队列创建分布式应用程序提供支持。WCF支持将MSMQ队列作为netMsmqBinding绑定的底层传输协议的通信。 netMsmqBinding绑定允许客户端直接把消息提交到一个队列中同时服务端从队列中读取消息。客户端和服务端之间没有直接通信过程;因此,通信本 …

React 18 RC 版本发布啦,生产环境用起来!

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列今天给…

阿拉伯语排版设计_针对说阿拉伯语的用户的测试和设计

阿拉伯语排版设计Let me start off with some data to put things into perspective “Why?”让我从一些数据入手,以透视“为什么?”的观点。 Arabic is the 5th most spoken language worldwide, with 420 million speakers, and is an official lang…

SVN:“SVN”不是内部命令,解决方法

1、安装完TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi 2、在运行窗口cmd---svn,提示: “SVN” 不是内部命令 郁闷,小有纠结 解决方法:安装Slik-Subversion-1.6.17-x64.msi 命令行窗口关闭,再次打开命令行窗口&#x…