保持 fork 更新的 Git 命令
提示
最近我在 Twitter 上看到了以下有关 git 的推文:
确实,您可以使用这些命令完成大部分工作。
但是,如果你想在 GitHub、GitLab 或 BitBucket 上 fork 并贡献代码给某个开源项目(甚至可能是这个网站!),该怎么办呢?你需要一些额外的命令来保持 fork 的更新,分别是remote
、fetch
和merge
。让我们看看如何使用它们。
叉开
当你 fork 一个项目时,你会在自己的命名空间下复制一份。要使用该项目,你需要将代码库克隆到你自己的机器上。我们以我 fork 的一个代码库为例:Twilio 的 Node.js 包。fork 之后,我们克隆这个代码库:
git clone git@github.com:philnash/twilio-node.git
我们现在可以看到 的第一个用例。在目录中remote
运行,我们看到以下内容:git remote
twilio-node
git remote
origin
好吧,这没什么用,它只是显示我们有一个名为“origin”的远程仓库。再次运行并加上--verbose
flag 会显示更多信息:
git remote --verbose
origin git@github.com:philnash/twilio-node.git (fetch)
origin git@github.com:philnash/twilio-node.git (push)
这更好,这表明远程存储库是我们克隆的存储库,我们可以从中获取并推送到它。
做出改变
当向代码库贡献代码时,最简单的方法是在分支上进行。这样可以保持主分支的整洁,并轻松保持更新。Cory 在推文中列出的六个命令涵盖了设置更改的步骤:使用 创建一个新分支branch
,然后根据需要多次checkout
进行更改,最后将分支恢复到原点,也就是你的 fork 分支。然后,你就可以创建拉取请求,并祈祷它被接受。commit
push
过了一段时间,你发现想再发起一个拉取请求,但原来的仓库已经迁移了。你需要更新你的 fork 分支,以便使用最新的代码。你可以删除你的 fork 分支,然后重新 fork 并克隆仓库,但这会造成很多不必要的工作。建议你添加上游仓库作为该仓库的另一个远程仓库,然后通过命令行使用它。
添加上游
为此,我们remote
再次使用该命令,这次是针对add
一个新的远程仓库。找到原始仓库的 URL,并将其添加为新的远程仓库。按照惯例,这个远程仓库被称为“上游”,但您可以随意命名。
git remote add upstream git@github.com:twilio/twilio-node.git
现在,如果我们再次检查仓库的远程仓库,我们将同时看到源和上游。您可以使用-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)
获取最新
为了使 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
git fetch
从仓库下载对象和引用,但不会将其应用到我们正在处理的分支。我们希望将更新应用到 master 分支,因此请确保它已被签出。
git checkout master
合并在一起
为了使主分支与远程保持同步,将merge
远程的主分支合并到我们自己的分支中,如下所示:
git merge upstream/master
如果您的工作没有发布到主分支,那么一切进展顺利。最后,push
更新到分支,以确保它也能保持最新状态。
git push origin master
现在,fork 的 master 分支上的所有内容都已更新。如果您需要更新其他分支,请将分支名称替换为您正在使用的分支。
快捷方式
如果您一直在使用,git pull
那么您可能已经看到了一个潜在的快捷方式。是和pull
的组合,因此要在一个命令中执行这两个操作,您可以运行:fetch
merge
git pull upstream master
叉子快乐
这就是你在为开源项目做贡献时,保持你的分支更新所需了解的全部内容。添加上游代码库作为新的代码库remote
,以及你想要更新的分支。fetch
merge
有关此处各种命令的更多详细信息,请参阅Pro Git 书中的“使用远程操作”。
请记住,如果您在使用 git 时遇到困难,请查看Oh shit, git!来了解所有基于咒骂的自我拯救方法。
快乐分叉!
文章来源:https://dev.to/philnash/git-commands-to-keep-a-fork-up-to-date-2327