保持 fork 保持最新的 Git 命令提示

2025-06-07

保持 fork 更新的 Git 命令

提示

最近我在 Twitter 上看到了以下有关 git 的推文:

确实,您可以使用这些命令完成大部分工作。

但是,如果你想在 GitHub、GitLab 或 BitBucket 上 fork 并贡献代码给某个开源项目(甚至可能是这个网站!),该怎么办呢?你需要一些额外的命令来保持 fork 的更新,分别是remotefetchmerge。让我们看看如何使用它们。

叉开

当你 fork 一个项目时,你会在自己的命名空间下复制一份。要使用该项目,你需要将代码库克隆到你自己的机器上。我们以我 fork 的一个代码库为例:Twilio 的 Node.js 包。fork 之后,我们克隆这个代码库:

git clone git@github.com:philnash/twilio-node.git

Enter fullscreen mode Exit fullscreen mode

我们现在可以看到 的第一个用例。在目录remote运行,我们看到以下内容:git remotetwilio-node

git remote
origin

Enter fullscreen mode Exit fullscreen mode

好吧,这没什么用,它只是显示我们有一个名为“origin”的远程仓库。再次运行并加上--verboseflag 会显示更多信息:

git remote --verbose
origin  git@github.com:philnash/twilio-node.git (fetch)
origin  git@github.com:philnash/twilio-node.git (push)

Enter fullscreen mode Exit fullscreen mode

这更好,这表明远程存储库是我们克隆的存储库,我们可以从中获取并推送到它。

做出改变

当向代码库贡献代码时,最简单的方法是在分支上进行。这样可以保持主分支的整洁,并轻松保持更新。Cory 在推文中列出的六个命令涵盖了设置更改的步骤:使用 创建一个新分支branch然后根据需要多次checkout进行更改,最后将分支恢复到原点,也就是你的 fork 分支。然后,你就可以创建拉取请求,并祈祷它被接受。commitpush

过了一段时间,你发现想再发起一个拉取请求,但原来的仓库已经迁移了。你需要更新你的 fork 分支,以便使用最新的代码。你可以删除你的 fork 分支,然后重新 fork 并克隆仓库,但这会造成很多不必要的工作。建议你添加上游仓库作为该仓库的另一个远程仓库,然后通过命令行使用它。

添加上游

为此,我们remote再次使用该命令,这次是针对add一个新的远程仓库。找到原始仓库的 URL,并将其添加为新的远程仓库。按照惯例,这个远程仓库被称为“上游”,但您可以随意命名。

git remote add upstream git@github.com:twilio/twilio-node.git

Enter fullscreen mode Exit fullscreen mode

现在,如果我们再次检查仓库的远程仓库,我们将同时看到源和上游。您可以使用-v的快捷方式--verbose

git remote -v
origin git@github.com:philnash/twilio-node.git (fetch)
origin git@github.com:philnash/twilio-node.git (push)
upstream    git@github.com:twilio/twilio-node.git (fetch)
upstream    git@github.com:twilio/twilio-node.git (push)

Enter fullscreen mode Exit fullscreen mode

获取最新

为了使 repo 保持最新,我们现在可以fetch从上游 repo 获取最新版本。它看起来像这样:

git fetch upstream
remote: Counting objects: 6427, done.
remote: Compressing objects: 100% (549/549), done.
remote: Total 6427 (delta 5156), reused 5105 (delta 4939), pack-reused 934
Receiving objects: 100% (6427/6427), 2.54 MiB | 1.28 MiB/s, done.
Resolving deltas: 100% (5399/5399), completed with 391 local objects.
From github.com:twilio/twilio-node
   6a6733a8..73656c50 master -> upstream/master

Enter fullscreen mode Exit fullscreen mode

git fetch从仓库下载对象和引用,但不会将其应用到我们正在处理的分支。我们希望将更新应用到 master 分支,因此请确保它已被签出。

git checkout master

Enter fullscreen mode Exit fullscreen mode

合并在一起

为了使主分支与远程保持同步,将merge远程的主分支合并到我们自己的分支中,如下所示:

git merge upstream/master

Enter fullscreen mode Exit fullscreen mode

如果您的工作没有发布到主分支,那么一切进展顺利。最后,push更新到分支,以确保它也能保持最新状态。

git push origin master

Enter fullscreen mode Exit fullscreen mode

现在,fork 的 master 分支上的所有内容都已更新。如果您需要更新其他分支,请将分支名称替换为您正在使用的分支。

快捷方式

如果您一直在使用,git pull那么您可能已经看到了一个潜在的快捷方式。是pull的组合,因此要在一个命令中执行这两个操作,您可以运行:fetchmerge

git pull upstream master

Enter fullscreen mode Exit fullscreen mode

叉子快乐

这就是你在为开源项目做贡献时,保持你的分支更新所需了解的全部内容。添加上游代码库作为新的代码remote,以及你想要更新的分支。fetchmerge

有关此处各种命令的更多详细信息,请参阅Pro Git 书中的“使用远程操作”

请记住,如果您在使用 git 时遇到困难,请查看Oh shit, git!来了解所有基于咒骂的自我拯救方法。

快乐分叉!

文章来源:https://dev.to/philnash/git-commands-to-keep-a-fork-up-to-date-2327
PREV
如何不对 JavaScript 中的数组进行排序
NEXT
新的 Angular YouTube Player 组件!