Git 是一款流行的版本控制系统(VCS),用于在软件开发中随时间跟踪文件变更。它通过允许开发者并行协作而不会相互覆盖彼此的改动,从而促进协作。由于所有开发者都保留了项目历史的完整本地副本,个人可以离线独立工作,并在准备就绪时安全地合并他们的更改。
所谓远程仓库(remote),是指托管在云端在线服务(如 GitHub 或 BitBucket)上的 Git 项目版本。
本文将更详细地探讨 Git 远程。如果您刚开始使用 Git,建议先阅读我们的Git 初学者教程。
什么是 Git 远程?
Git 远程提供了一个集中位置,用于存储、共享和让他人访问仓库。用户可以将本地更改推送到远程,也可以从远程拉取队友的更新。远程还可用于备份代码以及将代码部署到生产环境。
本地仓库 位于您的计算机上,因此您可以在本地编写代码、提交(commit)并测试更改。远程仓库位于线上,用于共享代码、与他人协作并备份您的工作。本文将演示如何使用 Git 命令在本地和远程仓库之间同步更改。
Git 工作流
一个典型的 Git 工作流从将远程仓库“克隆”到本地机器开始。克隆后,您可能会创建一个新分支来开发功能或修复问题,进行修改,并在本地提交这些更改。
当工作准备就绪时,将该分支“推送”到远程,并发起拉取请求以供评审。获批后,将更改合并到主分支。
整个过程中,您需要定期“拉取”更新,以保持本地仓库与远程同步。

典型的 Git 工作流(图片来源于Git 入门课程)
我们来更详细地看看这一流程。
克隆仓库
假设您想复制一个远程仓库,这个过程称为“克隆”仓库。有了本地副本,您可以修改代码并测试新功能。
要使用 Git,请确保已安装它,然后打开终端并使用命令:git clone <URL>。
例如,要从用户名为 “datacamp” 的 GitHub 页面克隆名为 “project” 的项目,使用
git clone https://github.com/datacamp/project.git技术支持
默认远程:'origin'
当您克隆一个仓库时,Git 会创建一个名为 origin 的默认远程。这个 origin 标签充当您克隆来源仓库 URL 的别名。
在典型的 Git 工作流中,当您运行 git push 或 git pull 等命令时,Git 会假定您指的是 origin,除非您指定了其他远程。这简化了在本地副本与共享仓库之间同步更改的过程。我们将在本文稍后更详细地介绍推送与拉取。
管理 Git 远程
常见的远程管理任务包括使用 git remote 查看现有远程,以及用 git remote add 添加新的远程。
查看现有远程
要查看现有远程,使用命令 git remote。
git remote
>> origin技术支持
在我们的示例中,列出了远程别名 origin,但未显示其 URL。若想查看每个远程关联的 URL,请使用 -v 标志。
git remote -v
>> origin https://github.com/datacamp/project.git (fetch)
>> origin https://github.com/datacamp/project.git (push)技术支持
添加新的远程
您可能希望将本地仓库连接到另一个远程。例如,如果您 fork 了一个项目,除了跟踪 main 远程的更改外,您还可能想跟踪原始仓库的变更。或者,您可能希望将代码推送到多个平台,如 GitHub 和 GitLab。
要添加新的远程,使用命令 git remote add <name> <URL>。我们来添加一个名为 new_remote 的新远程。
git remote add new_remote https://github.com/datacamp/project技术支持
为远程命名很有用,这样在合并时您无需反复输入 URL。
重命名与移除远程
重命名远程很简单。使用命令 git remote rename <old-name> <new-name>。例如,
git remote rename new_remote original_remote技术支持
要验证远程是否已被重命名,可用 git remote 列出远程。
要移除远程,使用 git remote remove <name>。在我们的示例中:
git remote remove new_remote技术支持
现在,列出远程进行验证。
git remote
>> origin技术支持
我们看到唯一的远程是 origin。
使用远程分支
Git 中的分支是一条独立于 main 的路径,允许您在不影响项目主版本的情况下单独进行更改。完成并评审后,您可以将该分支合并回主项目。
列出远程分支
要列出远程分支,使用命令 git branch -r。
git branch -r
>> origin/HEAD -> origin/main
>> origin/main技术支持
我们来解读输出。origin/main 这一行表示在远程 origin 上存在名为 main 的远程分支。origin/HEAD -> origin/main 这一行表明远程的默认分支是 origin/main。因此,该输出告诉您 main 是 origin 远程上的默认分支,而且它目前是唯一列出的远程分支。
跟踪远程分支
您通常需要将本地分支与远程分支关联,以保持代码同步。当本地分支跟踪一个远程分支时,您可以在不每次都指定远程和分支名的情况下进行拉取和推送。
Git 还会跟踪您的本地分支比远程分支超前或落后了多少个提交,便于管理变更。
命令 git checkout --track origin/<branch-name> 会创建一个新的本地分支来跟踪指定的远程分支。它会创建一个与 <branch-name> 同名的本地分支,并将其与远程版本关联。这样,后续的 git pull 和 git push 将自动与正确的远程分支交互。您可以在我们的教程中进一步了解Git 推送与拉取。
从远程抓取与拉取
为了让您的本地分支与其他开发者的更改保持同步,您需要将内容拉取到本地分支。“拉取”意味着从远程的对应分支下载最新更改,并将这些更改合并到您本地的该分支中。这可确保您使用的是最新代码。
假设我们想从名为 origin 的远程抓取所有分支。可使用命令 git fetch origin。如果只想抓取特定分支,例如 main,请指定它,如 git fetch origin main。
抓取之后,您仍需将抓取到的更改合并到当前本地分支以完成同步。为此,运行 git merge origin/<branch-name>,将 <branch-name> 替换为您抓取的分支名。例如,要合并远程 main 分支的更改,使用 git merge origin/main。
由于常常需要按顺序执行抓取和合并,Git 提供了一个可同时完成这两步的命令:git pull。例如,要从名为 origin 的远程的 main 分支抓取并合并更改,您可以使用 git pull origin main。
何时使用 fetch 与 merge,何时使用 pull?使用 fetch 与 merge 的两步流程能让您对更新过程有更高的掌控度。抓取可让您在合并到本地分支之前先查看远程发生了什么变化。这有助于您审查更新、比较差异或更谨慎地处理潜在冲突。
当您确信远程更改可以立即安全合并并且希望快速更新分支时,请使用 pull。它很方便,将两步合为一步,但在合并发生前的可见性较低。
推送到远程仓库
将本地分支的内容“推送”到远程,意味着您把本地更改发送到远程仓库的对应分支。这会用您的最新工作更新远程,方便他人查看、拉取或在其基础上继续构建。推送可共享您的贡献,并帮助保持远程仓库对所有参与者都是最新的。
将本地更改上传到远程包括三个步骤。
1. 使用 git add 暂存您要包含的文件。要添加所有更改,使用
git add技术支持
如要添加特定文件,请指定文件名。
git add <filename>技术支持
2. 提交更改(commit),并包含一条说明您所做工作的消息。
git commit -m “Your commit message here”技术支持
3. 推送到远程。
git push origin branch-name技术支持
实践示例
我们来看看一些实践示例:克隆仓库,以及跨多个远程协作。
克隆仓库
以下是克隆仓库的分步指南。
- 获取仓库 URL。复制您要克隆的仓库 URL。该 URL 可在您的云服务提供商(如 GitHub 或 BitBucket)处获取。
- 选择目录。导航至您希望复制仓库到的本地文件夹。
- 克隆仓库。运行命令
git clone <URL>。例如,运行git clone https://github.com/datacamp/project。这会创建一个名为 project 的新文件夹,包含仓库内容。
- 列出已配置的远程。克隆后,用
git remote 命令检查远程。在我们的示例中,您会看到 origin,这是 Git 为您克隆来源的远程及其 URL 指定的默认名称。
与多个远程协作
当您为开源项目做贡献或通过个人副本(fork)协作时,通常会与两个远程一起工作:origin(您 fork 的仓库)和 upstream(您 fork 的源仓库)。通常,您对 origin 有写入权限,但对 upstream 没有。
在管理多个远程时,有一些最佳实践需要注意。
- 添加
upstream 远程。克隆您的 fork 后,将原始仓库作为 upstream 进行跟踪:git remote add upstream <URL>。
- 保持您的 fork 最新。定期使用命令 git fetch upstream 从 upstream 仓库抓取更改。然后将这些更改合并或变基到您的本地分支。
- 避免向
upstream 仓库推送。通常您并不拥有(也不需要)对 upstream 的推送权限。您所有的更改都应推送到 origin,并从那里发起拉取请求。
- 使用有描述性的分支名。保持本地分支井然有序。最好用所开发的功能或处理的问题来为分支命名。
- 检查您的远程设置。使用
git remote -v 查看远程配置,并验证 origin 与 upstream 的 URL 是否正确。
- 开始工作前先同步。在开始新工作前,请务必将 upstream 的最新更改拉取到您的主分支,以保持最新并避免后续冲突。
Git 远程的最佳实践与技巧
以下是使用 Git 远程时应遵循的一些最佳实践:
保持远程同步更新
定期抓取变更有助于确保您的本地仓库与远程版本保持最新。运行 git fetch 可从远程下载任何新变更,而不影响您当前的分支。
这能让您了解同事推送了什么、更方便比较变更,并帮助您为必要的更新或合并做好准备。持续抓取能降低冲突概率,使协作流程更顺畅。
随着时间推移,当远程仓库删除了某些分支,您的本地 Git 设置仍可能显示这些旧的远程跟踪分支。这些被称为“陈旧”的远程跟踪分支。
要清理分支,请运行 git remote prune origin,以移除在 origin 上已不存在的远程跟踪分支。
定期进行这一步,有助于保持本地仓库整洁、便于查找相关分支,并确保您不会引用过时的工作。
处理与远程的冲突
远程冲突可能很难解决。最佳方案是通过确保多人不会同时修改同一处代码来预防冲突。但这并非总能做到。
尽管我们尽力避免,冲突仍可能发生。一旦出现,请按以下步骤有效处理。
- 使用
git status 查看需要您处理的冲突。
- 打开存在冲突的文件,编辑以解决差异。
- 使用合并工具。诸如 VS Code 或
git mergetool 等工具提供并排比较,并允许您选择保留哪一版本的代码。
- 与团队沟通。如果冲突不明确,请在解决前与同事确认。确保理解哪些行应保留、哪些应删除。
- 解决冲突后测试代码,确保一切正常、未被破坏。
- 提交您的更改。解决所有冲突后,暂存文件并提交以完成合并。
变基(Rebase)
使用 git pull --rebase 可以通过将您的更改应用在最新远程提交之上,降低复杂合并冲突的可能性。
当您使用 git pull --rebase 时,Git 会先从远程抓取最新更改,然后将您的本地提交依次应用在其之上,仿佛您的工作发生在之后。
这种方式有助于形成更干净、线性的提交历史,并可减少混乱的合并冲突。
与创建合并提交来组合历史不同,变基让它看起来像是您在远程更新之后才进行了更改。您可以在我们的Git Rebase 教程中了解更多。
结论
Git 远程对于协作开发至关重要,它连接本地仓库与共享代码库。本文介绍了关键的远程操作,包括设置、通过 fetch、pull 与 push 命令进行同步,以及管理多个远程连接。
掌握上述概念可帮助您更高效地协作、维护清晰的项目历史,并为您的开发团队做出贡献。
如需更多与 Git 远程分支相关的信息,请查看 DataCamp 的资源。
Git 是一款流行的版本控制系统(VCS),用于在软件开发中随时间跟踪文件变更。它通过允许开发者并行协作而不会相互覆盖彼此的改动,从而促进协作。由于所有开发者都保留了项目历史的完整本地副本,个人可以离线独立工作,并在准备就绪时安全地合并他们的更改。
所谓远程仓库(remote),是指托管在云端在线服务(如 GitHub 或 BitBucket)上的 Git 项目版本。
本文将更详细地探讨 Git 远程。如果您刚开始使用 Git,建议先阅读我们的Git 初学者教程。
什么是 Git 远程?
Git 远程提供了一个集中位置,用于存储、共享和让他人访问仓库。用户可以将本地更改推送到远程,也可以从远程拉取队友的更新。远程还可用于备份代码以及将代码部署到生产环境。
本地仓库 位于您的计算机上,因此您可以在本地编写代码、提交(commit)并测试更改。远程仓库位于线上,用于共享代码、与他人协作并备份您的工作。本文将演示如何使用 Git 命令在本地和远程仓库之间同步更改。
Git 工作流
一个典型的 Git 工作流从将远程仓库“克隆”到本地机器开始。克隆后,您可能会创建一个新分支来开发功能或修复问题,进行修改,并在本地提交这些更改。
当工作准备就绪时,将该分支“推送”到远程,并发起拉取请求以供评审。获批后,将更改合并到主分支。
整个过程中,您需要定期“拉取”更新,以保持本地仓库与远程同步。
典型的 Git 工作流(图片来源于Git 入门课程)
我们来更详细地看看这一流程。
克隆仓库
假设您想复制一个远程仓库,这个过程称为“克隆”仓库。有了本地副本,您可以修改代码并测试新功能。
要使用 Git,请确保已安装它,然后打开终端并使用命令:
git clone <URL>。例如,要从用户名为 “datacamp” 的 GitHub 页面克隆名为 “project” 的项目,使用
默认远程:'origin'
当您克隆一个仓库时,Git 会创建一个名为
origin的默认远程。这个origin标签充当您克隆来源仓库 URL 的别名。在典型的 Git 工作流中,当您运行
git push或git pull等命令时,Git 会假定您指的是origin,除非您指定了其他远程。这简化了在本地副本与共享仓库之间同步更改的过程。我们将在本文稍后更详细地介绍推送与拉取。管理 Git 远程
常见的远程管理任务包括使用
git remote查看现有远程,以及用git remote add添加新的远程。查看现有远程
要查看现有远程,使用命令
git remote。在我们的示例中,列出了远程别名
origin,但未显示其 URL。若想查看每个远程关联的 URL,请使用-v标志。添加新的远程
您可能希望将本地仓库连接到另一个远程。例如,如果您 fork 了一个项目,除了跟踪
main远程的更改外,您还可能想跟踪原始仓库的变更。或者,您可能希望将代码推送到多个平台,如 GitHub 和 GitLab。要添加新的远程,使用命令
git remote add <name> <URL>。我们来添加一个名为new_remote的新远程。为远程命名很有用,这样在合并时您无需反复输入 URL。
重命名与移除远程
重命名远程很简单。使用命令
git remote rename <old-name> <new-name>。例如,要验证远程是否已被重命名,可用
git remote列出远程。要移除远程,使用
git remote remove <name>。在我们的示例中:现在,列出远程进行验证。
我们看到唯一的远程是
origin。使用远程分支
Git 中的分支是一条独立于
main的路径,允许您在不影响项目主版本的情况下单独进行更改。完成并评审后,您可以将该分支合并回主项目。列出远程分支
要列出远程分支,使用命令
git branch -r。我们来解读输出。
origin/main这一行表示在远程origin上存在名为main的远程分支。origin/HEAD -> origin/main这一行表明远程的默认分支是origin/main。因此,该输出告诉您main是origin远程上的默认分支,而且它目前是唯一列出的远程分支。跟踪远程分支
您通常需要将本地分支与远程分支关联,以保持代码同步。当本地分支跟踪一个远程分支时,您可以在不每次都指定远程和分支名的情况下进行拉取和推送。
Git 还会跟踪您的本地分支比远程分支超前或落后了多少个提交,便于管理变更。
命令
git checkout --track origin/<branch-name>会创建一个新的本地分支来跟踪指定的远程分支。它会创建一个与<branch-name>同名的本地分支,并将其与远程版本关联。这样,后续的git pull和git push将自动与正确的远程分支交互。您可以在我们的教程中进一步了解Git 推送与拉取。从远程抓取与拉取
为了让您的本地分支与其他开发者的更改保持同步,您需要将内容拉取到本地分支。“拉取”意味着从远程的对应分支下载最新更改,并将这些更改合并到您本地的该分支中。这可确保您使用的是最新代码。
假设我们想从名为
origin的远程抓取所有分支。可使用命令git fetch origin。如果只想抓取特定分支,例如main,请指定它,如git fetch origin main。抓取之后,您仍需将抓取到的更改合并到当前本地分支以完成同步。为此,运行
git merge origin/<branch-name>,将<branch-name>替换为您抓取的分支名。例如,要合并远程main分支的更改,使用git merge origin/main。由于常常需要按顺序执行抓取和合并,Git 提供了一个可同时完成这两步的命令:
git pull。例如,要从名为origin的远程的main分支抓取并合并更改,您可以使用git pull origin main。何时使用
fetch与merge,何时使用pull?使用fetch与merge的两步流程能让您对更新过程有更高的掌控度。抓取可让您在合并到本地分支之前先查看远程发生了什么变化。这有助于您审查更新、比较差异或更谨慎地处理潜在冲突。当您确信远程更改可以立即安全合并并且希望快速更新分支时,请使用
pull。它很方便,将两步合为一步,但在合并发生前的可见性较低。推送到远程仓库
将本地分支的内容“推送”到远程,意味着您把本地更改发送到远程仓库的对应分支。这会用您的最新工作更新远程,方便他人查看、拉取或在其基础上继续构建。推送可共享您的贡献,并帮助保持远程仓库对所有参与者都是最新的。
将本地更改上传到远程包括三个步骤。
1. 使用
git add暂存您要包含的文件。要添加所有更改,使用如要添加特定文件,请指定文件名。
2. 提交更改(commit),并包含一条说明您所做工作的消息。
3. 推送到远程。
实践示例
我们来看看一些实践示例:克隆仓库,以及跨多个远程协作。
克隆仓库
以下是克隆仓库的分步指南。
git clone <URL>。例如,运行git clone https://github.com/datacamp/project。这会创建一个名为 project 的新文件夹,包含仓库内容。git remote命令检查远程。在我们的示例中,您会看到origin,这是 Git 为您克隆来源的远程及其 URL 指定的默认名称。与多个远程协作
当您为开源项目做贡献或通过个人副本(fork)协作时,通常会与两个远程一起工作:
origin(您 fork 的仓库)和upstream(您 fork 的源仓库)。通常,您对origin有写入权限,但对upstream没有。在管理多个远程时,有一些最佳实践需要注意。
upstream远程。克隆您的 fork 后,将原始仓库作为 upstream 进行跟踪:git remote add upstream <URL>。upstream仓库推送。通常您并不拥有(也不需要)对 upstream 的推送权限。您所有的更改都应推送到origin,并从那里发起拉取请求。git remote -v查看远程配置,并验证origin与upstream的 URL 是否正确。Git 远程的最佳实践与技巧
以下是使用 Git 远程时应遵循的一些最佳实践:
保持远程同步更新
定期抓取变更有助于确保您的本地仓库与远程版本保持最新。运行
git fetch可从远程下载任何新变更,而不影响您当前的分支。这能让您了解同事推送了什么、更方便比较变更,并帮助您为必要的更新或合并做好准备。持续抓取能降低冲突概率,使协作流程更顺畅。
随着时间推移,当远程仓库删除了某些分支,您的本地 Git 设置仍可能显示这些旧的远程跟踪分支。这些被称为“陈旧”的远程跟踪分支。
要清理分支,请运行
git remote prune origin,以移除在origin上已不存在的远程跟踪分支。定期进行这一步,有助于保持本地仓库整洁、便于查找相关分支,并确保您不会引用过时的工作。
处理与远程的冲突
远程冲突可能很难解决。最佳方案是通过确保多人不会同时修改同一处代码来预防冲突。但这并非总能做到。
尽管我们尽力避免,冲突仍可能发生。一旦出现,请按以下步骤有效处理。
git status查看需要您处理的冲突。git mergetool等工具提供并排比较,并允许您选择保留哪一版本的代码。变基(Rebase)
使用
git pull --rebase可以通过将您的更改应用在最新远程提交之上,降低复杂合并冲突的可能性。当您使用
git pull --rebase时,Git 会先从远程抓取最新更改,然后将您的本地提交依次应用在其之上,仿佛您的工作发生在之后。这种方式有助于形成更干净、线性的提交历史,并可减少混乱的合并冲突。
与创建合并提交来组合历史不同,变基让它看起来像是您在远程更新之后才进行了更改。您可以在我们的Git Rebase 教程中了解更多。
结论
Git 远程对于协作开发至关重要,它连接本地仓库与共享代码库。本文介绍了关键的远程操作,包括设置、通过 fetch、pull 与 push 命令进行同步,以及管理多个远程连接。
掌握上述概念可帮助您更高效地协作、维护清晰的项目历史,并为您的开发团队做出贡献。
如需更多与 Git 远程分支相关的信息,请查看 DataCamp 的资源。