
在软件开发过程中,管理多个贡献者的代码可能会很快变得一团糟。想象一下,几个人同时编辑同一个文档,每个人都在添加新想法、修复错误或调整功能。如果没有一个结构化的系统,就很难跟踪谁在什么时候、为什么修改了什么?错误很难挽回,合并项目的不同版本也会很快变得混乱。这正是 Git 以及 GitHub 所要解决的核心问题,它为开发人员提供了一种强大的方式来跟踪变更、高效协作并管理代码库的多个版本,同时又不会相互掣肘。本文将作为 Git 教程,从初学者的视角出发,为那些在使用 Git 过程中遇到困难的人提供指导。
Git 是一种分布式版本控制系统。它用于监控代码随时间的变化。它允许开发人员分开工作,并在不发生冲突的情况下合并他们的工作。Git 还提供了整个项目的单独副本和代码历史记录,这让它变得更快、更可靠。因此,它既适用于个人项目,也适用于协作项目。Git 大多基于命令行,它为用户提供了一个强大的工具箱,用于分支功能、提交更新、阶段性修改,以及精确地撤销错误。重要的是要记住,Git 只是一个管理代码的工具;它完全独立于 GitHub 等网站,可以在没有互联网或任何托管服务的情况下运行。
以下是 Git 背后主要概念的快速分解:
以下是访问 Git 的三种不同方式:
现在,我们已经介绍了基础知识,并在系统上设置了 Git,是时候动手实践了。在本节中,我们将介绍每个开发者都应该掌握的一些最基本的 Git 命令。无论你是要开始一个新项目,还是要在现有项目上进行协作,这些命令都是有效使用 Git 的核心工作流程。我们将保持简单、实用和初学者友好的风格。没有花哨的设置,只有真正用得上的命令。打开你的终端,让我们开始吧!
创建目录
mkdir git_learning
更改目录
cd git_and_github
初始化git
git init
该命令将初始化 Git 仓库。

你可以找到 .git 文件夹。这是 Git 维护的重要文件夹。它在执行 git init 命令时创建。Git 基本上使用哈希值来存储文件,因此非常节省内存。
现在我们来创建一些文件。
创建文件
touch file1.txt
编辑文件
vi file1.txt
输入 i 进入插入模式,添加一些文本,然后点击 escape 键,输入 :wq 保存文件。
另一个文件也是如此。
touch file2.txt vi file2.txt

要了解仓库的状态
git status
该命令将显示目录中的更改以及这些更改是否被跟踪。

对于简短的状态,您可以使用
git status -s
在 Git 中进行提交之前,我们有一个叫做暂存区的地方。在这里,我们可以看到所做的修改,并在提交前对其进行审查。这是 Git 的一个特殊功能。我们可以查看上一次提交和暂存改动之间的改动,然后进行新的提交。
我们将使用
git add git add file1.txt file2.txt

这将开始跟踪目录中的更改。
现在,要将目录中的所有文件添加到暂存中,只需使用:
git add .
使用该命令时要谨慎。因为它会跟踪目录中的所有内容,如日志、环境文件、数据集等。这可能会造成 Git 负载过重,导致版本管理效率低下。
每个提交都有一个
你可能会认为,每次提交都保存整个快照会占用内存,效率很低。但 Git 不会存储重复内容,并会压缩内容以减少内存空间。所以,这也许是个可行的策略!
git commit -m “Short description”
-m 是指信息。

但有时,我们并不满意简短的描述。我们必须提供更多关于所做更改的背景信息。
为此,我们只需使用:
git commit
这将在编辑器中打开一个文件,我们可以在其中键入少于 80 个字符的描述(别忘了在描述后添加换行符)。为此,让我们为新的提交做一些修改。让我再添加一个空文件并提交修改。

一个误解是 “当我们提交暂存区时,暂存区就变成了空的!”。这是不正确的。暂存区域不会变空,相反,暂存区域和之前的提交没有区别。
指导原则 :
我们能在不将修改添加到暂存区域的情况下(即在使用 git add 命令之前)提交修改吗?
可以。让我们来看一个例子。让我对 file3.txt 进行修改。

git commit -am “message”
-a 会让 Git 自动分阶段处理已修改和已跟踪的文件。

比方说,你已经暂存了整个版本库,但你想删除一个文件。通常,你会使用 rm 命令来删除文件。但该文件仍在暂存区域,所以要删除该文件,我们将采取以下步骤。
一种可能的 *** 是使用普通的 rm 命令,然后用 git add <deleted_filename> 从起始区域移除该文件。我知道这听起来很奇怪,但 git add 会将文件从暂存区域移除。

由于这里跟踪的是 file3.txt,因此显示 file3.txt 已被删除。
如果有一个文件已被暂存,而你又想删除它,请按以下步骤操作:

让我们试试在不使用传统 rm 命令的情况下使用 git rm <file_name>。

我们可以从 git status 中看到新文件已经存在。之后,使用 git rm 命令,我们会发现新文件不存在了。git rm 命令会删除暂存区域和工作目录中的文件,而 rm 命令(linux)只会删除工作目录中的文件。
让我们看看如何忽略对某些文件的跟踪。但这引出了一个问题:为什么要不跟踪文件?原因如下:假设你有日志文件:你会生成大量日志文件、数据集,每次对它们进行更改时都会更新。它们基本上都是 *** ON 格式,但每次运行笔记本都会产生不同的输出,这使得 Git 难以跟踪变化。因此使用 .gitignore 来避免 Git 追踪这些文件。
我们总是需要忽略一些文件,比如日志文件。在版本库中添加这些文件只会增加版本库的大小。因此,我们必须在 Git 中忽略这些文件。在下图中,我创建了一个日志目录和一个日志文件。随后,我创建了一个 .gitignore 文件,并在 .gitignore 文件中添加了一个日志目录条目。这样,Git 就不会再追踪指定的文件了。

我们可以看到,日志文件夹不再被跟踪。
有一个问题!当我们使用 git add 或 commit 开始跟踪某个文件,然后将其添加到 gitignore 时,Git 仍会跟踪该文件或目录中的改动。因此,为了避免这种情况,我们必须从暂存区域移除这些文件/目录。但 git rm 会同时删除暂存区和目录中的文件。因此,如果我们只想从暂存区移除文件,就要使用 :
git rm -r – cached directory_name/filename

可以看到,文件 not_track.txt 已被跟踪。因此,为了避免这种情况发生,我们必须使用以下命令:
git rm -r –cached directory_name/filename

现在,让我们看看上次提交和暂存文件之间有哪些改动。
我们将使用下面的命令来查看:
git diff --staged

以下是对上述截图的解释:
.gitignore 之前并不存在(/dev/null 表示没有之前的文件)。
添加了两个条目:
file3.txt 正在从 repo 中删除(分阶段删除)。该文件有一行 “这是我的第三个文件”。
开发人员通常使用图形用户界面工具(如 )查看 diff,但也可以使用命令行查看差异。
git diff 会比较上次提交的文件和暂存的文件。例如:a/file1. js 是旧文件,b/file1.js 是新文件 → 旧副本中的改动用红色的 - 号(减号)表示,新副本中的改动用绿色的 + 号(加号)表示(如图所示)。
Green - newly appended linesRed - these lines will be removedWhite - These lines are there in the old and new code.
git diff 命令显示了目录和暂存之间的差异。
让我们在目录中做一些改动,以使用该命令:

现在,让我们对所有文件进行阶段化,并提交我们的更改,以查看过去进行的所有提交。查看 *** 如下:
git log

git log —oneline → 这将给出提交的简要摘要。
git log —oneline —reverse → 这将反转提交的顺序。

要查看提交中的更改,我们可以使用
git show <id of that commit>

git restore --staged filename → 这将从上次提交中获取文件并放到这里。
git restore . 会从暂存环境中获取文件并放到工作目录中。但如果有新的未跟踪文件,而之前的提交中又没有该文件,它就会保持原样。

我们可以看到,运行 git restore 命令后,file1.txt 中的更改已恢复到之前的提交状态。
在本节实践课程中,我们学习了实际开发工作流程中使用的 Git 基本命令。我们从建立 Git 仓库开始,学习了如何创建和编辑文件。介绍了工作目录、暂存区域和提交等关键概念,以及 git init、git add、git commit 和git status 等命令。我们探讨了 Git 如何跟踪更改、管理文件版本以及处理暂存与未暂存文件。我们特别强调了正确的提交 *** 、使用 .gitignore来避免跟踪不必要的文件,以及使用 git diff 来查看差异。最后,我们还学习了如何使用 git log、git show 和git restore 查看以前的提交并恢复修改。
Git 一开始可能会让人不知所措,但一旦掌握了暂存、提交、恢复和查看历史等核心概念,它就会成为工作流程中的强大工具。在本文中,我们将重点放在命令行上,因为它能让你对幕后发生的一切拥有更大的控制权和透明度。了解了 Git 如何跟踪文件、处理提交和管理变更,你就能写出更简洁的代码,更有效地开展协作,并在出现问题时迅速恢复。无论你是要回滚错误的变更、查看提交历史,还是整理工作,Git 都能为你提供支持。
Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...
宝塔面板其中一个最为便捷的功能之一,无需SFTP或者FTP即可对服务器的文件内容进行上传、下载、编辑及删除等管理操作。 文件管理,用于管理该服务器上的文件内容。 文件的基础操作 文件的基础操作有哪些了,主要有这些方面:复制、粘贴、剪切、删除、重命名、压缩、刷新、新建文件、新建目录。...
宝塔面板提供丰富的软件以一键安装,这让服务器环境搭建提供不少的便利性,站长可以根据实际需求快速编译安装以实现不同的功能需求。 软件管理,主要是宝塔提供的一些面板扩展插件。 Nginx Nginx是一个高性能的HTTP和反向代理服务器,具有轻量级、占用内存小,并发能力强等优势。 w...
经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...
想成为一名网络开发人员或好奇工作的哪些子类型的薪水最高?Web开发是一个竞争激烈、多样化的行业,随着新语言和框架的出现而不断发展。 询问Web开发人员的薪水是一个难以解决的问题(尽管我们尝试)。有太多的因素需要考虑。 无论您是自由开发者还是有兴趣从事更传统的工作、喜欢前端或后端工作,或者想知...
Node.js和PHP是Web开发工作中常用的两种基本Web技术。两者都为服务器端开发做出了贡献,Node.js甚至同时服务于客户端和服务器端开发。 PHP已经为开发人员服务了近3年,现在它为78%的网络提供支持。相比之下,Node.js相对较新,但扩展速度非常快,由于其全栈开发能力而成为流行...