如何在 Git 中克隆、修改、添加和删除文件

在我们的“Git 入门”系列文章的第二篇中,学习如何执行基本的 Git 操作。
478 位读者喜欢这篇文章。
cats

Opensource.com

本系列关于 Git 入门的第一篇文章中,我们创建了一个简单的 Git 仓库,并通过将其与我们的计算机连接,向其中添加了一个文件。在本文中,我们将学习关于 Git 的其他一些知识,即如何在 Git 仓库中克隆(下载)、修改、添加和删除文件。

让我们进行一些克隆

假设您在 GitHub 上已经有一个 Git 仓库,并且您想从中获取文件——也许您丢失了计算机上的本地副本,或者您正在另一台计算机上工作,并且想要访问您仓库中的文件。您应该怎么做?从 GitHub 下载您的文件?没错!在 Git 术语中,我们称之为“克隆”。(您也可以将仓库下载为 ZIP 文件,但我们将在本文中探讨克隆方法。)

让我们克隆我们在上一篇文章中创建的名为 Demo 的仓库。(如果您尚未创建 Demo 仓库,请返回上一篇文章并在继续之前完成这些步骤。)要克隆您的文件,只需打开浏览器并导航到 https://github.com/<your_username>/Demo(其中 <your_username> 是您自己的仓库名称。例如,我的仓库是 https://github.com/kedark3/Demo)。导航到该 URL 后,单击“Clone or download”按钮,您的浏览器应如下所示

Clone with HTTPS screen

opensource.com

如上所示,“Clone with HTTPS”选项已打开。从该下拉框中复制您仓库的 URL (https://github.com/<your_username>/Demo.git)。打开终端并键入以下命令,将您的 GitHub 仓库克隆到您的计算机

git clone https://github.com/<your_username>/Demo.git

然后,要查看 Demo 目录中的文件列表,请输入命令

ls Demo/

您的终端应如下所示

Terminal

opensource.com

修改文件

现在我们已经克隆了仓库,让我们修改文件并在 GitHub 上更新它们。首先,逐个输入以下命令,将目录更改为 Demo/,检查 README.md 的内容,将新的(附加)内容回显到 README.md,并使用 git status 检查状态

cd Demo/
ls
cat README.md
echo "Added another line to REAMD.md" >> README.md
cat README.md
git status

如果您逐个运行这些命令,终端中的显示应如下所示

Terminal after running git status

opensource.com

让我们看一下 git status 的输出,并了解其含义。不必担心

On branch master
Your branch is up-to-date with 'origin/master'.".

部分,因为我们尚未学习它。下一行显示:Changes not staged for commit;这告诉您,下面列出的文件未标记为准备好(“暂存”)提交。如果您运行 git add,Git 会获取这些文件并将它们标记为 Ready for commit;换句话说(Git 术语),Changes staged for commit。在执行此操作之前,让我们使用 git diff 命令检查我们要添加到 Git 的内容,然后运行 git add

这是您的终端输出

Terminal output of git diff and git add

opensource.com

让我们分解一下

  • diff --git a/README.md b/README.md 是 Git 正在比较的内容(即,本例中的 README.md)。
  • --- a/README.md 将显示从文件中删除的任何内容。
  • +++ b/README.md 将显示添加到文件中的任何内容。
  • 添加到文件中的任何内容都以绿色文本打印,并在行首带有 + 号。
  • 如果我们删除了任何内容,它将以红色文本打印,并在开头带有 - 号。
  • Git 状态现在显示 Changes to be committed:,并列出文件名(即 README.md)以及该文件发生了什么(即,它已被 modified 并准备好提交)。

提示:如果您已经运行了 git add,现在您想查看有什么不同,通常的 git diff 不会产生任何结果,因为您已经添加了该文件。相反,您必须使用 git diff --cached。它将显示当前版本与 Git 被告知要添加的文件的前一个版本之间的差异。您的终端输出应如下所示

Checking differences on an added file

opensource.com

将文件上传到您的仓库

我们已经使用一些新内容修改了 README.md 文件,现在是时候将其上传到 GitHub 了。

让我们提交更改并将它们推送到 GitHub。运行

git commit -m "Updated Readme file"

这告诉 Git 您正在“提交”您已“添加”到其中的更改。您可能还记得本系列的第一部分,添加消息以解释您在提交中所做的事情非常重要,这样您以后查看 Git 日志时就知道其目的。(我们将在下一篇文章中更详细地讨论这个主题。)Updated Readme file 是此提交的消息——如果您认为这不是解释您所做操作的最合乎逻辑的方式,请随意以不同的方式编写您的提交消息。

运行 git push -u origin master。这将提示您输入用户名和密码,然后将文件上传到您的 GitHub 仓库。刷新您的 GitHub 页面,您应该看到您刚刚对 README.md 所做的更改。

GitHub after changes made to README.md

opensource.com

终端的右下角显示我提交了更改,检查了 Git 状态,并将更改推送到了 GitHub。Git 状态显示

Your branch is ahead of 'origin/master' by 1 commit
  (use "git push" to publish your local commits)

第一行表明本地仓库中有一个提交,但 origin/master(即 GitHub 上)中不存在。下一行指示我们将这些更改推送到 origin/master,而这正是我们所做的。(要刷新您对“origin”在这种情况下含义的记忆,请参阅本系列的第一篇文章。我将在下一篇文章中解释“master”的含义,届时我们将讨论分支。)

向 Git 添加新文件

现在我们已经修改了一个文件并在 GitHub 上更新了它,让我们创建一个新文件,将其添加到 Git,并将其上传到 GitHub。运行

echo "This is a new file" >> file.txt

这将创建一个名为 file.txt 的新文件。

如果您 cat 输出它

cat file.txt

您应该看到文件的内容。现在运行

git status

Git 报告您的仓库中有一个未跟踪的文件(名为 file.txt)。这是 Git 告诉您,您的计算机上的仓库目录中有一个新文件,您尚未告知 Git,并且 Git 不会跟踪您对该文件所做的任何更改。

Terminal reporting untracked file

opensource.com

我们需要告诉 Git 跟踪此文件,以便我们可以提交它并将其上传到我们的仓库。这是执行此操作的命令

git add file.txt
git status

您的终端输出是

Terminal after telling Git to track a file

opensource.com

Git 状态告诉您,file.txt 有要提交的更改,并且它对 Git 来说是一个 new file,Git 之前并不知道这一点。现在我们已经将 file.txt 添加到 Git,我们可以提交更改并将其推送到 origin/master。

Terminal after adding a file to Git

opensource.com

Git 现在已将此新文件上传到 GitHub;如果您刷新您的 GitHub 页面,您应该在 GitHub 上的 Git 仓库中看到新文件 file.txt

GitHub after adding a file to Git

opensource.com

通过这些步骤,您可以创建任意数量的文件,将它们添加到 Git,并提交并将它们推送到 GitHub。

从 Git 中删除文件

如果我们发现自己犯了一个错误,需要从我们的仓库中删除 file.txt 怎么办?一种方法是使用以下命令从仓库的本地副本中删除文件

rm file.txt

如果您现在执行 git status,Git 会说有一个文件 not staged for commit,并且已从仓库的本地副本中 deleted。如果我们现在运行

git add file.txt
git status

我知道我们正在删除文件,但我们仍然运行 git add,因为我们需要告诉 Git 我们正在进行的更改。当我们向 Git 添加新文件、修改现有文件的内容并将其添加到 Git,或从 Git 仓库中删除文件时,可以使用 git add。实际上,git add 会考虑所有更改,并将这些更改暂存以进行提交。如有疑问,请仔细查看下面终端屏幕截图中每个命令的输出。

Git 会告诉我们,已删除的文件已暂存以进行提交。一旦您提交此更改并将其推送到 GitHub,该文件也将从 GitHub 上的仓库中删除。通过运行以下命令执行此操作

git commit -m "Delete file.txt"
git push -u origin master

现在您的终端看起来像这样

Terminal after deleting a file

opensource.com

您的 GitHub 看起来像这样

GitHub after deleting a file

opensource.com

现在您知道如何从您的仓库中克隆、添加、修改和删除 Git 文件了。本系列的下一篇文章将探讨 Git 分支。

User profile image.
Kedar 是 Red Hat 的软件质量工程师,从事 CloudForms (上游 ManageIQ) 项目,主要负责我们内部基础设施的部署/管理。对 Jenkins Pipeline 和 Ansible 用于自动化部署感兴趣。也在编写用于监控和警报的 Shinken 模块。

4 条评论

感谢您的文章和信息。很棒的文章。
上帝保佑您!

很棒的系列。

不错的教程,只是未着色的终端输出需要额外的关注。至少有一个彩色提示符。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.