推送到 GitHub
先从 push 的概念开始讲起。
使用命令行推送到 GitHub
最好的学习方式就是动手实践,下面我们一步步操作。
1. 创建新仓库
您需要创建一个新仓库,并点击加号。
填写所有必填信息,即仓库名称、描述,并将仓库设为公开(此处免费)。

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。该命令可帮助找到您要处理的目标文件。
4. 初始化 git 仓库
使用 git init 初始化仓库。它会创建一个新的空仓库,并在项目顶层生成隐藏目录 .git,将所有修订信息集中存放。

5. 将文件添加到新的本地仓库
使用 git add . 暂存当前目录中的所有文件。使用 git status 查看哪些文件已被暂存并准备好进行首次提交。

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

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

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 密钥。

10. 在 GitHub 上查看仓库中的文件
现在您就能在 GitHub 上看到托管的文件了。

使用 GitHub Desktop 推送到 GitHub
GitHub Desktop 适用于任意操作系统,它提供图形用户界面(GUI),可将本地仓库中的内容推送到 GitHub 等远程仓库。
您需要先在浏览器中打开 GitHub 账户,创建新仓库的流程(即第 1 步)与上文“使用命令行推送到 GitHub”相同。
1. 点击 "Set up in a Desktop"
点击下图所示按钮,弹出窗口后选择 "Open GitHub desktop"。

2. 在 GitHub Desktop 中克隆
点击下图所示的 Clone 按钮。
克隆完成后,会在本机创建一个文件夹,其中也包含隐藏目录 .git。 
3. 将本机所需文件复制到克隆的文件夹中
将所有需要的文件、图片、README 文件等复制到该克隆文件夹。

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

5. 在 GitHub Desktop 发布分支,将所有文件上传到 GitHub
点击 Publish Branch,将本地内容全部发布到 GitHub。

完成所有步骤后,您可以在 GitHub 上查看您的仓库。
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 的流程。
上图中可以看到单词 "containnns" 的拼写错误。
1. Fork 仓库
“Fork” 是仓库的一个副本。Fork 一个仓库可以让您在不影响原项目的情况下自由尝试更改。(来源)

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

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

4. 使用 vim 或直接编辑 README 文件进行修改
将 README 文件中的 "containnns" 改为 "contains",并使用下述命令查看更改与当前状态。
5. 将文件添加并提交到仓库
使用以下命令添加并提交更改。

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

7. 在 GitHub 上为特定分支发起 PULL Request
前往您在 GitHub 上的仓库,您会看到一个新分支。
现在可以进行第 8 步,但也可能需要将本地仓库与上游仓库保持同步更新。
或者,您也可以在命令行中执行 git pull-request 发起 PULL Request,它会引导您将当前分支推送到远程仓库并完成请求。

8. 打开一个 Pull request
点击 Create pull request 按钮完成此操作。

在 PULL Request 合并后删除分支
进入仓库主页并点击 Pull requests。

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

现在点击 Delete branch 完成操作。

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

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


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

通过 GitHub Desktop 发起 PULL Request
文件 "imp" 中存在拼写错误,仓库所有者为 MNALO,协作者 Olivia 按以下流程在 GitHub Desktop 中创建 PULL request。
1. 克隆并在桌面打开
克隆项目并点击 "Open in Desktop"。

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

3. 在文本编辑器中修改 imp 文件
修改 imp 文件内容,修复拼写并补充文本。
4. 提交更改
编写提交说明并点击 "Commit to fix-typo-imp"。

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

6. 创建 PULL request
点击 Create pull request 发起 PULL request。
您也可以先填写消息,再次点击 Create pull request。

之后的流程与上文“通过命令行发起 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" 作为替代。


在本教程中,我将带您了解如何使用 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)。