跳至主要内容

Git Push 与 Pull 教程

学习如何通过 GitHub Desktop 和命令行执行 Git PUSH 与 PULL 操作。
· 13分钟 阅读

使用 AI 探索

在本教程中,我将带您了解如何使用 Git 的 push 与 pull 命令,以及如何通过 GitHub Desktop 和命令行创建 pull request。本指南适用于管理代码仓库的任何人。

即使您是初学者,也可以跟着本教程的所有材料一起操作。不过,如果您刚接触 Git,建议先阅读我们的GitHub 和 Git 初学者教程,并按照我们的Git 环境搭建指南完成环境配置。

什么是 Git Push 和 Git Pull?

从高层来看,二者的差异如下:

git push 会将您的本地提交上传到像 GitHub 这样的远程仓库;而 git pull 会从远程仓库下载更改并将其合并到您的本地分支。这两个命令既可通过命令行使用,也可在 GitHub Desktop 中完成。

注意: Pull request 是 GitHub 的一项功能,用于在合并前提出并审查更改——它并不等同于 git pull 命令。

要将本地分支的提交推送到远程仓库,请使用:

git push <remote_name> <branch_name>

另请注意: GitHub 已不再支持密码验证。请改用 SSH 密钥或个人访问令牌(PAT)。

推送到 GitHub

先从 push 的概念开始讲起。 

使用命令行推送到 GitHub

最好的学习方式就是动手实践,下面我们一步步操作。

1. 创建新仓库

您需要创建一个新仓库,并点击加号。

填写所有必填信息,即仓库名称、描述,并将仓库设为公开(此处免费)。

Creating a new repository Creating a new repository 2

2. 打开 Git Bash

可在此处下载 Git Bash。它是一个与操作系统交互的 shell,遵循 UNIX 命令。

3. 在桌面创建本地项目并定位到当前工作目录

pwd 表示“print working directory”,用于打印当前目录。

通过 cd 'path_name' 移动到本机的指定路径。cd 命令表示“change directory”,用于在操作系统中切换工作目录。要定位文件,需要提供 'path_name',例如 C:/Users/Dell/Downloads/FaceDetect-main。该命令可帮助找到您要处理的目标文件。

Create your local project in your desktop directed towards a current working directory.

4. 初始化 git 仓库

使用 git init 初始化仓库。它会创建一个新的空仓库,并在项目顶层生成隐藏目录 .git,将所有修订信息集中存放。

Initialize the git repository

5. 将文件添加到新的本地仓库

使用 git add . 暂存当前目录中的所有文件。使用 git status 查看哪些文件已被暂存并准备好进行首次提交。

Add the file to the new local repository.
6. 在本地仓库提交已暂存的文件并编写提交消息

运行 git commit -m 'your message' 创建提交,记录暂存的更改到本地仓库。git commit 使用 -m 标志添加提交消息,简要说明更改的内容与原因。建议用祈使语句,长度不超过 50 个字符。

Commit the files staged in your local repository by writing a commit message.
7. 从 GitHub 复制远程仓库 URL

从您的 GitHub 账户复制 HTTPS 或 URL,它指向远程仓库的位置。

Copy your remote repository's URL from GitHub.

8. 将复制的 URL(远程仓库)添加为本地仓库推送目标

git remote add origin 'your_url_name'

在上述代码中,origin 是远程名称,远程 URL 为 "https://github.com/Olivia-Smithcoder100/FaceDetection.git"。在此示例中远程托管在 GitHub 上,GitHub 提供用于添加远程仓库的 URL。

9. 将本地仓库代码推送到 GitHub

git push -u origin main 用于将本地内容推送到 GitHub。

其中,origin 是默认的远程仓库名,-u 标志表示设置上游(等同于 -set-upstream)。main 为分支。name.upstream 指的是我们克隆项目时的上游仓库。

使用您的 GitHub 凭据进行验证。请注意,GitHub 已不再支持密码验证用于 Git 操作。您需要改用个人访问令牌(PAT)或 SSH 密钥。

Push the code in your local repository to GitHub

10. 在 GitHub 上查看仓库中的文件

现在您就能在 GitHub 上看到托管的文件了。

View your files in your repository hosted on GitHub.

使用 GitHub Desktop 推送到 GitHub

GitHub Desktop 适用于任意操作系统,它提供图形用户界面(GUI),可将本地仓库中的内容推送到 GitHub 等远程仓库。

您需要先在浏览器中打开 GitHub 账户,创建新仓库的流程(即第 1 步)与上文“使用命令行推送到 GitHub”相同。

1. 点击 "Set up in a Desktop"

点击下图所示按钮,弹出窗口后选择 "Open GitHub desktop"。

Click "Set up in a Desktop" 1 Click "Set up in a Desktop" 2

2. 在 GitHub Desktop 中克隆

点击下图所示的 Clone 按钮。

Cloning in a GitHub Desktop 1 克隆完成后,会在本机创建一个文件夹,其中也包含隐藏目录 .git。 Cloning in a GitHub Desktop 2

3. 将本机所需文件复制到克隆的文件夹中

将所有需要的文件、图片、README 文件等复制到该克隆文件夹。

Copy all the required files from your local computer into the clone folder on your computer.

4. 切换回 GitHub Desktop,并提交到 main 分支

您会在 GitHub Desktop 中看到已添加到克隆文件夹的文件。最后,填写提交说明并点击 Commit to main。

Move to GitHub Desktop and commit to master

5. 在 GitHub Desktop 发布分支,将所有文件上传到 GitHub

点击 Publish Branch,将本地内容全部发布到 GitHub。

Publish branch in GitHub Desktop to upload your all files to GitHub.
完成所有步骤后,您可以在 GitHub 上查看您的仓库。

You can view your repository in GitHub after you have completed all steps.

Git PULL Request

Pull request 是 GitHub 的一项功能,用于在您将更改推送到仓库后通知项目维护者。它不同于 git pull 命令——pull request 是在更改合并到主分支前提出与审查更改的一种方式。

从某个分支拉取的简单命令为:

git pull 'remote_name' 'branch_name'

git pull 是 git fetch(在本地仓库抓取最新提交)与 git merge(将远程分支合并到本地分支)的组合。此外,remote_name 是仓库名,branch_name 是特定分支名称。

下面将介绍两种使用PULL request 的方式。

通过命令行发起 PULL Request

如下图所示,README 文件中有个拼写错误,将单词 "contain" 错写为 "containnns"。该仓库的所有者为 MNALO,Olivia 是协作者。她将修复该错误并提交 PULL Request。下面通过示例演示发起 PULL Request 的流程。

PULL Request through Command Line. 上图中可以看到单词 "containnns" 的拼写错误。

1. Fork 仓库

“Fork” 是仓库的一个副本。Fork 一个仓库可以让您在不影响原项目的情况下自由尝试更改。(来源)

1. Fork the Repository.

2. 在计算机中打开 bash

使用 cd 命令移动到所需路径或文件夹,使用 ls 命令查看目录中的内容(列出当前目录的所有文件)。在我们的示例中,您可以看到存在 “README.md”。

Open your bash in your computer.

3. 新建分支

使用 git checkout -b 'branch_name' 创建新分支。上述命令中的 -b 标志用于创建新分支,branch_name 为分支名称;checkout 会切换到新建的分支。

Make a new branch.

4. 使用 vim 或直接编辑 README 文件进行修改

将 README 文件中的 "containnns" 改为 "contains",并使用下述命令查看更改与当前状态。

Make a change by using vim from bash or direct replacement from the original README file.

5. 将文件添加并提交到仓库

使用以下命令添加并提交更改。

Adding and Committing a file to the repository.

6. 将分支推送到 GitHub

使用 git push origin 'branch_name' 推送内容。上述命令中,origin 是远程仓库,'branch_name' 是需要上传本地内容的分支。

Push the repository to the GitHub.

7. 在 GitHub 上为特定分支发起 PULL Request

前往您在 GitHub 上的仓库,您会看到一个新分支。

现在可以进行第 8 步,但也可能需要将本地仓库与上游仓库保持同步更新。 

或者,您也可以在命令行中执行 git pull-request 发起 PULL Request,它会引导您将当前分支推送到远程仓库并完成请求。

PULL request for a specific branch on GitHub.

8. 打开一个 Pull request

点击 Create pull request 按钮完成此操作。

Open a Pull request

在 PULL Request 合并后删除分支

进入仓库主页并点击 Pull requests。

Deleting a Branch after the PULL Request is Merged.

点击 Closed 查看您创建的所有 PULL Request 列表。目前只有一个需要选择,即与您想删除的分支相关的那个。

Deleting a Branch after the PULL Request is Merged. 2

现在点击 Delete branch 完成操作。

Deleting a Branch after the PULL Request is Merged. 3

仓库所有者可以查看协作者等人提交的所有提交记录、pull request 等。其他人所做的更改可能是重要更新,也可能是快速修复 bug 或错误,都会被纳入项目。

Deleting a Branch after the PULL Request is Merged. 4

仓库所有者接下来点击 "Merge pull request",并在后续流程中点击 "Confirm merge" 进行确认。

Deleting a Branch after the PULL Request is Merged. 5

Deleting a Branch after the PULL Request is Merged. 6

README.md 文件中最后一次更改(修正后的拼写)如下。

Deleting a Branch after the PULL Request is Merged. 7

通过 GitHub Desktop 发起 PULL Request

文件 "imp" 中存在拼写错误,仓库所有者为 MNALO,协作者 Olivia 按以下流程在 GitHub Desktop 中创建 PULL request。

1. 克隆并在桌面打开

克隆项目并点击 "Open in Desktop"。

PULL Request through GitHub Desktop

2. 创建新分支

创建新分支 "fix-typo-imp"。

Create a new branch.

3. 在文本编辑器中修改 imp 文件

修改 imp 文件内容,修复拼写并补充文本。

4. 提交更改

编写提交说明并点击 "Commit to fix-typo-imp"。

Commit the changes.

5. 发布分支

现在发布分支,将提交推送到 GitHub。

Publish the branch

6. 创建 PULL request

点击 Create pull request 发起 PULL request。

您也可以先填写消息,再次点击 Create pull request。

Create a PULL Request 1. Create a PULL Request 2.

之后的流程与上文“通过命令行发起 PULL Request”相同。

结语

下一步,建议学习我们的 GitHub 概念 课程,继续练习日常任务。我也建议获取我们的 GitHub Foundations 认证,该认证由我们与 GitHub 合作推出。完成认证有助于丰富简历,而且完成课程后可享考试费用的大幅折扣。最后,建议了解 GitHub Actions,它们在与 push/pull 操作相关的CI/CD 工作流中越来越常用。

FAQs

什么是 Git push 命令?

git push 命令用于将本地仓库的内容上传到像 GitHub 这样的远程仓库。这对于与他人共享您的更改,或将本地开发与公共或共享仓库同步至关重要。

如何发起 Git pull request?

Git 的 pull request 并非一个直接的 Git 命令,而是 GitHub 提供的功能,用于在您将更改推送到 GitHub 上的仓库后通知项目维护者。您需要在自己 fork 的仓库中进行更改、推送这些更改,然后通过 GitHub 的网页界面提交 pull request。

git pull 与 git fetch 有何区别?

git pull 会执行两件事:它先从远程分支抓取更改,然后立即将其合并到您当前的分支。相比之下,git fetch 只会从远程仓库抓取更改,但不会合并,从而允许您在集成前先进行审查。

合并 pull request 后可以删除分支吗?

可以。pull request 合并后,您就可以安全地删除该分支,它的使命已经完成。删除分支有助于保持仓库整洁、易于管理。

使用 GitHub Desktop 进行 Git 操作需要哪些前提条件?

要使用 GitHub Desktop,您需要在系统上下载并安装该应用、拥有一个 GitHub 账户,并最好对 GitHub 的工作流程有一定了解。它提供了用户友好的界面,将许多 Git 命令简化为可点击的操作。

在 Git pull request 过程中如何解决冲突?

当两个分支在同一位置的更改彼此重叠且无法自动合并时,就会产生冲突。要解决冲突,您需要手动编辑文件以确定最终内容,更新更改,然后完成合并流程。GitHub 和 GitHub Desktop 中的工具可帮助识别并解决这些冲突。

GitHub 为什么将默认分支名从 master 改为 main?

GitHub 更改默认分支名是为了践行包容性语言实践。有人认为 "master" 一词可能存在不敏感之处,因此选择了更中性且更具描述性的 "main" 作为替代。 

主题