Git 入门:术语 101

想学习 Git 吗?查看这份最重要的术语和命令的快速总结。
259 位读者喜欢这篇文章。
Out of the trash and into the classroom

Opensource.com

版本控制是当今任何想要跟踪其更改的人的重要工具。它对于程序员、系统管理员和站点可靠性工程师 (SRE) 尤其有用。从错误中恢复到已知良好状态的承诺是一个巨大的胜利,并且比以前将 .old 添加到复制文件的策略更友好。

但是,学习 Git 常常被好心的同行过度简化,他们告诉每个人“进入开源领域”。在你意识到之前,有人会要求你进行拉取请求合并请求,你需要从上游进行 rebase,然后他们才能从你的远程合并——并且务必删除合并提交。当你看到所有这些你不认识的词时,你想要回馈给开源项目的任何运行良好的贡献都感觉离被添加更远了。

Git Cheat Sheet cover image

下载 我们的
Git 速查表。

如果你有一个月或两个月的时间和足够的好奇心,Git SCM 是你学习所有术语的权威来源。如果你正在寻找来自前线的总结,请继续阅读。

提醒:什么是提交?

对我来说,Git 最难内化的部分是 Git 最简单的概念:提交是内容的集合,关于你如何到达那里的消息,以及之前的提交。它没有内置的代码发布策略,甚至没有强烈的意见。内容甚至不必是代码——它是你想要添加到存储库的任何内容。提交消息注释该内容。

我喜欢将提交消息视为送给你未来自己的礼物:它可能会提及你编辑的文件,但更重要的是,它提醒你更改这些文件的意图。添加更多关于你为什么编辑你所编辑的内容的信息,有助于任何使用你的存储库的人,即使那个人是你自己。

没有比“origin/main”更好的地方了

了解你在 Git 项目中的位置,首先要想到一棵树。所有 Git 项目都有一个根,类似于文件系统的根目录的概念。所有提交都从该根分支出来。这样,分支只是指向提交的指针。按照惯例,mainmaster 是根目录中默认分支的默认名称。

由于 Git 是一个分布式版本控制系统,同一个代码库被分发到多个位置,人们经常使用术语“存储库”来谈论同一个项目的所有副本。有本地存储库,你在其中编辑代码(稍后详细介绍),以及远程存储库,你完成代码后想要发送到的地方。远程仓库可以在任何地方,甚至在你本地仓库所在的同一台计算机上,但它们通常托管在 GitLab 或 GitHub 等仓库服务上。

什么是pwd的 Git 命令?

虽然这不是一个官方的卖点,但迷路是 Git 存储库乐趣的一部分。你可以通过运行这组可靠的命令来找到方向

  • git branch—查找你所在的分支

  • git log—查看你所在的提交

  • git status—查看自上次提交以来你所做的编辑

  • git remote—查看你正在跟踪的远程存储库

使用这些命令定位自己,当你遇到困难时,会给你方向感。

我是否暂存或缓存了我的提交?

你计算机本地的代码俗称你的工作区。不太明显的是,当你在 Git 存储库中时,你还有另外两个(是的,两个!)本地位置:索引暂存区。当你编写一些内容然后 add 它时,你正在将其添加到索引中,索引是准备提交的缓存内容。有时,你索引中有文件但你尚未准备好提交,但你想查看另一个分支。这就是暂存区派上用场的地方。你可以使用 git stash 将索引但尚未提交的文件存储到暂存区。当你准备好检索文件时,运行 git stash pop 将更改带回索引。

以下是一些你将需要使用的命令来使用你的暂存区和缓存。

  • git diff ..origin/master—显示最近的本地提交与名为“origin”的远程仓库及其名为“master”的分支之间的差异

  • git diff --cached—显示最近的本地提交与已添加到本地索引的内容之间的任何差异

  • git stash—将索引(已添加但未提交)的文件放入暂存区堆栈

  • git stash list—显示暂存区堆栈中的更改

  • git stash pop—从暂存区堆栈中取出最近的更改

无头骑士

Git 是各种隐喻的集合。当我想象 HEAD 在哪里时,我会想到火车线路。如果你最终进入分离 HEAD 模式,则意味着你脱离了隐喻的轨道。

HEAD 是指向当前检出分支中最新提交的指针。默认的“checkout”是在你创建 Git 存储库并停留在 master 分支时。每次你创建或更改到另一个分支时,你都在该分支线上。如果你 git checkout <commit> 在当前分支中的某个位置,HEAD 将移动到该提交。如果你的当前提交与你检出的提交之间没有提交历史记录连接,那么你将处于分离 HEAD 状态。如果你在查找 HEAD 的位置时迷失了方向,你可以随时 git reset --hard origin/master 删除更改并返回到已知状态。警告: 这将删除你自上次推送到 master 以来所做的任何更改。

你在上游还是下游?

你的项目本地副本被认为是你的本地存储库。它可能有也可能没有远程存储库——你拥有存储库副本以便协作或安全保存的地方。也可能有一个上游存储库,其中项目的第三个副本由不同的贡献者集托管和维护。

例如,假设我想为 Kubernetes 做出贡献。我首先将 kubernetes/kubernetes 项目 fork 到我的帐户 mbbroberg/kubernetes。然后我将我的项目克隆到我的本地工作区。在这种情况下,我的本地克隆是我的本地存储库,mbbroberg/kubernetes 是我的远程存储库,而 kubernetes/kubernetes 是上游。

合并隐喻

当你深入研究 Git 分支时,根系统和火车轨道图像的视觉效果会合并在一起。分支通常用作开发新功能的方式,你最终希望将其合并到 master 分支中。执行此操作时,Git 会按顺序保留提交的共同历史记录,然后将分支的新提交附加到历史记录中。此过程有很多细微之处——是否要 rebase,是否要添加合并提交——Brent Laster 在“如何在 Git 中重置、还原和返回到以前的状态”中更详细地探讨了这些内容。

我想我现在 Git 入门了

掌握 Git 命令的世界需要大量的术语和探索。我希望我对日常使用这些术语的第一人称探索能帮助你适应这一切。如果你感到困惑或沮丧,请随时在 Twitter 上联系我 @mbbroberg

回顾

  • Commit(提交)—将索引的当前内容存储在新提交中,并附带用户描述更改的日志消息

  • Branch(分支)—指向提交的指针

  • Master(主分支)—第一个分支的默认名称

  • HEAD—指向当前分支上最新提交的指针

  • Merge(合并)—连接两个或多个提交历史记录

  • Workspace(工作区)—你的 Git 存储库本地副本的俗称

  • Working tree(工作树)—你的工作区中的当前分支;你一直可以在 git status 输出中看到它

  • Cache(缓存)—旨在临时存储未提交更改的空间

  • Index(索引)—在提交之前存储更改的缓存

  • Tracked and untracked files(已跟踪和未跟踪文件)—索引缓存中或尚未添加到索引缓存中的文件

  • Stash(暂存区)—另一个缓存,充当堆栈,可以在其中存储更改而不提交它们

  • Origin(远程仓库)—远程存储库的默认名称

  • Local repository(本地存储库)—另一个术语,用于指代你将 Git 存储库副本保存在工作站上的位置

  • Remote repository(远程存储库)—Git 存储库的辅助副本,你可以在其中推送更改以进行协作或备份

  • Upstream repository(上游存储库)—你跟踪的远程存储库的俗称

  • Pull request(拉取请求)—GitHub 特有的术语,用于告知其他人你已将更改推送到存储库中的分支

  • Merge request(合并请求)—GitLab 特有的术语,用于告知其他人你已将更改推送到存储库中的分支

  • 'origin/master'—远程存储库及其主分支的默认设置

附言:双关语是 Git 最好的部分之一。尽情享受吧。

标签
I'm happiest at a microphone
Matt 曾是 EMC 存储专家、VMware vExpert,以及其他专有技术的爱好者。他现在专注于开源和 DevRel 采用。

4 条评论

感谢 Matt,这是关于 git 的最佳帖子之一。
“没有比家更好的地方了”,我喜欢这句话

“拉取请求——GitHub 特有的术语,用于告知其他人你已将更改推送到存储库中的分支”

拉取请求也在 Bitbucket 以及服务器和客户端版本中使用。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© 2025 open-source.net.cn. All rights reserved.