git 术语
对于那些希望跟踪这些天的更改的人来说,版本控制是一个重要的工具。 这对程序员,系统管理员和站点可靠性工程师(SRE)都特别有用。 与以前将.old
添加到复制文件中的策略相比,从错误中恢复到已知的良好状态的承诺是一个巨大的胜利,并且比以前更友好。
但是学习Git常常被好心的同伴告诉每个人“进入开源”而过于简化。 你知道它之前,有人问你来自哪里, 上游 衍合 ,才可以从远程合并-and一定要删除合并提交 pull请求或合并请求 。 当您查看所有这些您不知道的单词时,无论您想给开源项目做出什么出色的贡献,都感觉远远没有增加。
如果您有一个月或两个月的好奇心, Git SCM是您需要学习的所有术语的权威来源。 如果您正在寻找战summary的摘要,请继续阅读。
提醒:什么是提交?
对我来说,Git内化的最困难部分是最简单的Git想法: 提交是内容的集合,有关您如何到达那里的信息,以及之前的提交 。 没有固有的代码发布策略,甚至没有内置的强硬意见。内容甚至不必是代码,这是您想要添加到存储库中的任何内容 。 提交消息注释了该内容。
我喜欢将提交消息视为对未来自我的礼物:它可能会提及您编辑的文件,但更重要的是,它使您想起更改这些文件的意图。 添加更多关于您为什么编辑自己的内容的信息,这将帮助使用您存储库的任何人,即使该人是您。
没有像“起源/主人”这样的地方
要知道您在Git项目中的位置,首先要考虑一棵树。 所有Git项目都有一个根目录,类似于文件系统根目录的概念。 所有提交都从该根分支出来。 这样,分支只是指向提交的指针。 按照约定, master是根目录中默认分支的默认名称。
由于Git是一个分布式版本控制系统,其中同一代码库分布在多个位置,因此人们经常使用术语“存储库”来谈论同一项目的所有副本。 有一个本地存储库 ,您可以在其中编辑代码(稍后再讨论),而远程存储库是您要在完成后发送代码的地方。 远程控制可以在任何地方,甚至可以在本地存储库所在的同一台计算机上,但是它们通常托管在GitLab或GitHub等存储库服务上。
Git命令的密码是什么?
虽然这不是官方的卖点,但丢失是Git存储库乐趣的一部分。 通过运行以下可靠的命令集,您可以找到自己的方式:
git branch
—查找您所在的分支git log
—查看您正在进行的提交git status
status-查看自上次提交以来所做的编辑git remote
—查看您要跟踪的远程存储库
使用这些命令来定向自己,可以让您在被卡住时有方向感。
我是否藏有或缓存了提交?
计算机本地代码俗称您的工作区 。 并不立即显而易见的是,当您位于Git存储库中时,您在本地还有两个(是,两个!)其他位置: index和stash 。 当您写一些内容然后添加它时,您会将其添加到索引中,该索引是准备提交的缓存内容。 有时,索引中有一些文件尚未准备好提交,但您想查看另一个分支。 那就是隐藏的地方。 您可以使用git stash
将尚未提交索引但尚未提交的文件存储到git stash
。 准备好检索文件时,请运行git stash pop
将更改带回到索引中。
这是使用存储和缓存所需的一些命令。
git diff ..origin/master
—显示最新的本地提交与远程(称为“ origin”)及其分支(称为“ master”)之间的区别git diff --cached
—显示最近的本地提交和已添加到本地索引之间的任何差异git stash
—将索引(添加但未提交)的文件放入存储堆栈git stash list
—显示隐藏堆栈中的更改git stash pop
pop-从存储堆栈中删除最新更改
无头骑士
Git是各种隐喻的集合。 当我想到头在哪里时,我想到了火车线路。 如果您最终处于分离的HEAD模式,则意味着您脱离了隐喻的轨道。
HEAD是指向当前已签出分支中的最新提交的指针。 默认的“签出”是在创建Git存储库并登陆到master分支时。 每次创建或更改到另一个分支时,您都在该分支行上。 如果您在当前分支的某个位置git checkout <commit>
,则HEAD将移至该提交。 如果没有提交历史记录将您当前的提交连接到已签出的提交,那么您将处于分离的HEAD状态。 如果您失去了寻找HEAD位置的头脑,则始终可以git reset --hard origin/master
删除更改并返回到已知状态。 警告:这将删除您自上次推送到母版以来所做的任何更改。
您是上游还是下游?
项目的本地副本被视为本地存储库。 它可能有也可能没有远程存储库,即您拥有存储库副本以进行协作或保管的地方。 可能还有一个上游资源库,其中项目的第三份副本由一组不同的贡献者托管和维护。
例如,假设我想为Kubernetes做出贡献。 我首先将kubernetes / kubernetes项目添加到我的帐户mbbroberg / kubernetes中 。 然后,我将项目克隆到本地工作区。 在这种情况下,我的本地克隆是我的本地存储库, mbbroberg / kubernetes是我的远程存储库,而kubernetes / kubernetes是上游。
合并隐喻
当您更深入地了解Git分支时,根系统的视觉效果将与火车轨迹图像融合在一起。 分支通常用作开发新功能的方法,您最终希望将其合并到master分支中。 这样做时,Git会按顺序保留常见的提交历史记录,然后将分支的新提交追加到历史记录中。 此过程有很多细微差别(无论是否要变基,是否添加合并提交), Brent Laster在“ 如何重置,还原和返回Git中的先前状态”中对此进行了更详细的探讨。
我想我现在就把它
要掌握Git命令的世界,这里有大量的术语和许多探索。 我希望我对日常使用这些术语的第一人称视角探索能够帮助您适应所有这些。 如果您感到困惑或沮丧,请随时通过Twitter @mbbroberg与我联系 。
回顾:
提交 -将索引的当前内容存储在新提交中,以及来自用户的描述更改的日志消息
分支 —指向提交的指针
Master-第一个分支的默认名称
HEAD —指向当前分支上最新提交的指针
合并-合并两个或多个提交历史
工作区 -Git存储库的本地副本的俗称
工作树 -工作区中的当前分支; 你一直在
git status
输出中看到这个缓存 -用于临时存储未提交的更改的空间
索引 -更改提交之前存储更改的缓存
跟踪和未跟踪的文件-索引缓存中或尚未添加到文件的文件
藏匿 -another缓存,充当堆栈,其中的变化可以保存不提交他们
来源 -远程存储库的默认名称
本地存储库-另一个术语,用于在您的工作站上保留Git存储库的副本
远程存储库 -Git 存储库的辅助副本,您可以在其中推送更改以进行协作或备份
上游存储库 -您跟踪的远程存储库的俗称
拉取请求 —一个GitHub专用术语,用于让其他人知道您已推送到存储库中分支的更改
合并请求 —一个特定于GitLab的术语,用于让其他人知道您已推送到存储库中的分支的更改
'origin / master'-远程存储库及其主分支的默认设置
后记:双关语是Git最好的部分之一。 和他们一起玩。
git 术语