你应该知道的高级 Git 概念
藏
恢复已删除的提交
Cherry Pick 提交
变基
合并策略
总结
感谢阅读
您是否已经熟悉了 的基础知识git
,但高级概念却让您摸不着头脑?
本文不仅会介绍高级git
概念,还会展示如何在实际场景中使用它们!让我们开始吧。
藏
我们首先来检查一下定义:
Git stash 是 Git 分布式版本控制工具的内置命令,它将工作区中的所有最新更改本地存储,并将工作区的状态重置为之前的提交状态。
可以将存储视为您所做但尚未提交的更改的临时存储。
此功能的实际用例是当您尚未完成更改,但需要从远程存储库中提取更新时。
要使用stash,您需要将文件添加到暂存区
git add .
并将其推送到存储区
git stash push
OR
git stash push -m "<stash message>"
要恢复所做的更改,请使用:
git stash apply
OR
git stash pop
apply
和之间的区别pop
在于应用存储pop
中的更改并将其从存储中删除,但即使在应用之后仍将更改保留在存储中。apply
要查看储藏中的物品,请使用:
git stash list
如果您有多个存储的更改,则可以使用索引来选择所需的更改
git stash apply stash@{<n>}
OR
git stash apply <n>
恢复已删除的提交
你曾经用过reset
带--hard
标志的命令吗?如果你用过,那么现在是时候惊慌失措了,因为它会彻底删除指定数量的提交。

别慌,reflog
我们已经帮你搞定了!要查看你最近做的更改,请运行:
git reflog show HEAD
OR
git reflog
您现在可以查看最近所做的更改。
现在您可以使用以下方式直接取回提交:
git reset --hard <commit hash>
注意:如果您有任何本地修改,该命令也会将其破坏,因此在重置之前使用存储是明智的。
Cherry Pick 提交
需要在另一个分支的提交中引入某个功能,但该分支尚未准备好合并?不,你不必等到分支合并完成才休息 500 年!
你可以只挑选你需要的提交
git cherry-pick -x <commit hash>
OR
git cherry-pick <commit hash>
强烈建议您使用-x
标志,因为它将生成标准化的提交消息,告知用户它cherry-picked
来自哪里。
变基
变基是将一系列提交移动或合并到一个新的基准提交的过程。rebase
在项目中使用变基的主要原因是维护线性的项目历史记录,以便更轻松地查看日志。
这样,即使您在变更引入之前就开始工作,也rebase
可以在任何分支上处理最新的变更。它还能帮助您实现“合并策略”部分讨论的“快速向前合并”。
要重新定基,请使用
git rebase <source branch>
因此,要重新创建图像中的示例,您需要移动到功能分支并运行:
git rebase main
警告
变基操作会在重写历史记录的同时创建新的提交。因此,应避免在将分支推送到公共仓库后进行变基操作,因为这可能会导致新旧提交混杂在一起,导致项目历史记录的某部分看起来突然消失了。
合并策略
你可能会问: “为什么要学习合并策略?”我的答案是,我想添加 5 个概念,而不是 4 个,所以我们就在这里😛。PS:别忘了点个❤️,以表我的诚意。
这是一个值得了解的概念,即使你不知道也没什么影响。不过,它可以在你浏览提交日志时提供一些帮助,否则你可能会疑惑,如果没有提交,合并是如何发生的。
有几种合并策略:
- 快进
- 递归
- 我们的
- 章鱼
- 解决
- 子树
常用的策略是Fast Forward和Recursive,我们将对此进行研究。
快速合并
当合并的目标分支不包含任何新的提交时,就会发生快速向前合并。在这种情况下,只有分支指针会向前移动到所需的提交,而不会添加任何新的提交!
合并主分支功能的示例
递归合并
递归合并发生在合并的源分支和目标分支都包含新的提交时。在这种情况下,会在目标分支中引入一个新的提交,合并所有更改。
合并主分支和特征分支的示例
您还可以使用以下方法强制递归合并:
git merge --no-ff
总结
新的一年伊始,git
您已掌握了先进的技能,准备好迎接世界!
快乐开发!
感谢阅读
需要一位顶级软件开发自由职业者来解决你的开发难题吗?在Upwork上联系我
想联系我吗?请在LinkedIn上联系我
关注我的博客,每两周在Medium上获取最新资讯
常问问题
这些是我经常收到的一些问题。希望这个常见问题解答部分能解决您的问题。
-
我是初学者,该如何学习前端 Web 开发?
可以参考以下文章: -
你能指导我吗?
抱歉,我工作已经很忙了,没时间指导任何人。