当前位置:首页 > 编程语言 > 正文内容

Git新手指南手册

a811625539个月前 (05-07)编程语言11

软件开发过程中,管理多个贡献者的代码可能会很快变得一团糟。想象一下,几个人同时编辑同一个文档,每个人都在添加新想法、修复错误或调整功能。如果没有一个结构化的系统,就很难跟踪谁在什么时候、为什么修改了什么?错误很难挽回,合并项目的不同版本也会很快变得混乱。这正是 Git 以及 GitHub 所要解决的核心问题,它为开发人员提供了一种强大的方式来跟踪变更、高效协作并管理代码库的多个版本,同时又不会相互掣肘。本文将作为 Git 教程,从初学者的视角出发,为那些在使用 Git 过程中遇到困难的人提供指导。

什么是Git?

Git 是一种分布式版本控制系统。它用于监控代码随时间的变化。它允许开发人员分开工作,并在不发生冲突的情况下合并他们的工作。Git 还提供了整个项目的单独副本和代码历史记录,这让它变得更快、更可靠。因此,它既适用于个人项目,也适用于协作项目。Git 大多基于命令行,它为用户提供了一个强大的工具箱,用于分支功能、提交更新、阶段性修改,以及精确地撤销错误。重要的是要记住,Git 只是一个管理代码的工具;它完全独立于 GitHub 等网站,可以在没有互联网或任何托管服务的情况下运行。

你需要知道的核心概念

以下是 Git 背后主要概念的快速分解:

  • 仓库(Repo):Git 跟踪文件和更改的目录。
  • 克隆:远程仓库在本地机器上的副本。
  • 提交:代码在某一特定时刻的快照,并附有描述改动的信息。
  • 分支:代码库的一个独立版本,用于开发新功能或修复。
  • 合并:将一个分支中的变更整合到另一个分支中。
  • 推送/拉取:将自己的修改发送到 GitHub 或拉取他人的更新。

如何访问Git

以下是访问 Git 的三种不同方式:

  1. 命令行 – 最广泛使用的 Git 访问方式。
  2. 集成开发环境(IDE) – 更流行的 Git 扩展工具是 ,它能在 vs 代码中提供大量扩展功能。
  3. Git 的图形用户界面 – 可参考官方网站
    1. GitKraken – Git 图形用户界面是更流行的图形用户界面之一
    2. SourceTree – 仅适用于 Windows 和 Mac。

动手实践

现在,我们已经介绍了基础知识,并在系统上设置了 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 的一个特殊功能。我们可以查看上一次提交和暂存改动之间的改动,然后进行新的提交。

我们将使用

git add 
git add file1.txt file2.txt

这将开始跟踪目录中的更改。

现在,要将目录中的所有文件添加到暂存中,只需使用:

git add .

使用该命令时要谨慎。因为它会跟踪目录中的所有内容,如日志、环境文件、数据集等。这可能会造成 Git 负载过重,导致版本管理效率低下。

每个提交都有一个

  1. ID – 唯一标识符(哈希值)。
  2. Message – 关于所做改动的描述。
  3. Date/Time – 何时修改的。
  4. Author – 谁修改了文件。
  5. Complete snapshot – 在提交时。

你可能会认为,每次提交都保存整个快照会占用内存,效率很低。但 Git 不会存储重复内容,并会压缩内容以减少内存空间。所以,这也许是个可行的策略!

提交更改

git commit -m “Short description”

-m 是指信息。

但有时,我们并不满意简短的描述。我们必须提供更多关于所做更改的背景信息。

为此,我们只需使用:

git commit

这将在编辑器中打开一个文件,我们可以在其中键入少于 80 个字符的描述(别忘了在描述后添加换行符)。为此,让我们为新的提交做一些修改。让我再添加一个空文件并提交修改。

一个误解是 “当我们提交暂存区时,暂存区就变成了空的!”。这是不正确的。暂存区域不会变空,相反,暂存区域和之前的提交没有区别。

指导原则

  1. 提交不应过大或过小。我们不必提交每个文件的小改动。同样,我们也不必在做了大量改动后才提交。当你达到想要记录的状态时,就进行提交。
  2. 如果您同时解决了一个错字和一个错误,也就是说:您在解决一个错误时发现了一个错字;那么这两个错误不应该同时提交,因为在还原错字时,错误也会被还原。因此,我们必须分开提交。此外,如果您将两个提交放在一起,我们也可以将它们分别取消提交。
  3. 提交信息应该有意义。由于 Git 不仅用于版本控制,还用于协作,所以提交信息要有意义,并遵循术语,这将有助于项目中的每个人理解所做的改动。

无暂存提交

我们能在不将修改添加到暂存区域的情况下(即在使用 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 addcommit 开始跟踪某个文件,然后将其添加到 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 表示没有之前的文件)。

添加了两个条目:

  • logs/ → 忽略该目录。
  • not_track.txt  → 忽略该文件。

file3.txt 正在从 repo 中删除(分阶段删除)。该文件有一行 “这是我的第三个文件”。

开发人员通常使用图形用户界面工具(如 )查看 diff,但也可以使用命令行查看差异。

git 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 initgit addgit commitgit status 等命令。我们探讨了 Git 如何跟踪更改、管理文件版本以及处理暂存与未暂存文件。我们特别强调了正确的提交 *** 、使用 .gitignore来避免跟踪不必要的文件,以及使用 git diff 来查看差异。最后,我们还学习了如何使用 git loggit showgit restore 查看以前的提交并恢复修改。

小结

Git 一开始可能会让人不知所措,但一旦掌握了暂存、提交、恢复和查看历史等核心概念,它就会成为工作流程中的强大工具。在本文中,我们将重点放在命令行上,因为它能让你对幕后发生的一切拥有更大的控制权和透明度。了解了 Git 如何跟踪文件、处理提交和管理变更,你就能写出更简洁的代码,更有效地开展协作,并在出现问题时迅速恢复。无论你是要回滚错误的变更、查看提交历史,还是整理工作,Git 都能为你提供支持。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/8301.html

分享给朋友:

“Git新手指南手册” 的相关文章

宝塔面板教程之不同环境安装篇

宝塔面板教程之不同环境安装篇

Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...

宝塔面板教程之文件管理篇

宝塔面板教程之文件管理篇

宝塔面板其中一个最为便捷的功能之一,无需SFTP或者FTP即可对服务器的文件内容进行上传、下载、编辑及删除等管理操作。 文件管理,用于管理该服务器上的文件内容。 文件的基础操作 文件的基础操作有哪些了,主要有这些方面:复制、粘贴、剪切、删除、重命名、压缩、刷新、新建文件、新建目录。...

宝塔面板教程之软件管理篇

宝塔面板教程之软件管理篇

宝塔面板提供丰富的软件以一键安装,这让服务器环境搭建提供不少的便利性,站长可以根据实际需求快速编译安装以实现不同的功能需求。 软件管理,主要是宝塔提供的一些面板扩展插件。 Nginx Nginx是一个高性能的HTTP和反向代理服务器,具有轻量级、占用内存小,并发能力强等优势。 w...

15种最佳编程字体以帮助您更愉悦地敲代码

15种最佳编程字体以帮助您更愉悦地敲代码

经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...

2022年Web开发人员的平均工资统计报告

2022年Web开发人员的平均工资统计报告

想成为一名网络开发人员或好奇工作的哪些子类型的薪水最高?Web开发是一个竞争激烈、多样化的行业,随着新语言和框架的出现而不断发展。 询问Web开发人员的薪水是一个难以解决的问题(尽管我们尝试)。有太多的因素需要考虑。 无论您是自由开发者还是有兴趣从事更传统的工作、喜欢前端或后端工作,或者想知...

正面对比Node.js与PHP

正面对比Node.js与PHP

Node.js和PHP是Web开发工作中常用的两种基本Web技术。两者都为服务器端开发做出了贡献,Node.js甚至同时服务于客户端和服务器端开发。 PHP已经为开发人员服务了近3年,现在它为78%的网络提供支持。相比之下,Node.js相对较新,但扩展速度非常快,由于其全栈开发能力而成为流行...