你应该知道的高级 Git 概念 Stash 恢复已删除的提交 Cherry Pick 提交 Rebase 合并策略 总结 感谢阅读

2025-05-26

你应该知道的高级 Git 概念

恢复已删除的提交

Cherry Pick 提交

变基

合并策略

总结

感谢阅读

您是否已经熟悉了 的基础知识git,但高级概念却让您摸不着头脑

挠头

本文不仅会介绍高级git概念,还会展示如何在实际场景中使用它们!让我们开始吧。

我们首先来检查一下定义:

Git stash 是 Git 分布式版本控制工具的内置命令,它将工作区中的所有最新更改本地存储,并将工作区的状态重置为之前的提交状态。

可以将存储视为您所做但尚未提交的更改临时存储

此功能的实际用例是当您尚未完成更改,但需要从远程存储库中提取更新时

要使用stash,您需要将文件添加到暂存区

git add .
Enter fullscreen mode Exit fullscreen mode

并将其推送到存储区

git stash push

     OR

git stash push -m "<stash message>"
Enter fullscreen mode Exit fullscreen mode

要恢复所做的更改,请使用:

git stash apply

     OR

git stash pop
Enter fullscreen mode Exit fullscreen mode

apply之间的区别pop在于应用存储pop中的更改并将其从存储中删除,但即使在应用之后仍将更改保留在存储中。apply

要查看储藏中的物品,请使用:

git stash list
Enter fullscreen mode Exit fullscreen mode

藏

如果您有多个存储的更改,则可以使用索引来选择所需的更改

git stash apply stash@{<n>}

     OR

git stash apply <n>
Enter fullscreen mode Exit fullscreen mode

恢复已删除的提交

你曾经用过reset--hard标志的命令吗?如果你用过,那么现在是时候惊慌失措了,因为它会彻底删除指定数量的提交

惊慌失措

别慌,reflog我们已经帮你搞定了!要查看你最近做的更改,请运行:

git reflog show HEAD

     OR

git reflog
Enter fullscreen mode Exit fullscreen mode

您现在可以查看最近所做的更改。

查找提交

现在您可以使用以下方式直接取回提交:

git reset --hard <commit hash>
Enter fullscreen mode Exit fullscreen mode

注意:如果您有任何本地修改该命令也会将其破坏,因此在重置之前使用存储是明智的

Cherry Pick 提交

需要在另一个分支的提交中引入某个功能,但该分支尚未准备好合并?不,你不必等到分支合并完成才休息 500 年!

你可以只挑选你需要的提交

git cherry-pick -x <commit hash>

     OR

git cherry-pick <commit hash>
Enter fullscreen mode Exit fullscreen mode

强烈建议您使用-x标志,因为它将生成标准化的提交消息,告知用户它cherry-picked来自哪里。

变基

变基是将一系列提交移动或合并到一个新的基准提交的过程。rebase在项目中使用变基的主要原因是维护线性的项目历史记录,以便更轻松地查看日志。

Git 变基

这样,即使您在变更引入之前就开始工作,也rebase可以在任何分支上处理最新的变更。它还能帮助您实现“合并策略”部分讨论的“快速向前合并”

要重新定基,请使用

git rebase <source branch>
Enter fullscreen mode Exit fullscreen mode

因此,要重新创建图像中的示例,您需要移动到功能分支并运行:

git rebase main
Enter fullscreen mode Exit fullscreen mode

警告

变基操作会在重写历史记录的同时创建新的提交。因此,应避免在将分支推送到公共仓库后进行变基操作,因为这可能会导致新旧提交混杂在一起,导致项目历史记录的某部分看起来突然消失了

合并策略

你可能会问: “为什么要学习合并策略?”我的答案是,我想添加 5 个概念,而不是 4 个,所以我们就在这里😛。PS:别忘了点个❤️,以表我的诚意。

这是一个值得了解的概念,即使你不知道也没什么影响。不过,它可以在你浏览提交日志时提供一些帮助,否则你可能会疑惑,如果没有提交,合并是如何发生的

有几种合并策略

  • 快进
  • 递归
  • 我们的
  • 章鱼
  • 解决
  • 子树

常用的策略是Fast ForwardRecursive,我们将对此进行研究。

快速合并

当合并的目标分支不包含任何新的提交时,就会发生快速向前合并在这种情况下,只有分支指针会向前移动到所需的提交而不会添加任何新的提交!

快速合并

合并主分支功能的示例

递归合并

递归合并发生在合并的源分支和目标分支都包含新的提交时。在这种情况下,会在目标分支中引入一个新的提交,合并所有更改。

递归合并

合并主分支和特征分支的示例

您还可以使用以下方法强制递归合并:

git merge --no-ff
Enter fullscreen mode Exit fullscreen mode

总结

新的一年伊始,git您已掌握了先进的技能,准备好迎接世界!

快乐开发!

感谢阅读

需要一位顶级软件开发自由职业者来解决你的开发难题吗?在Upwork上联系我

想看看我正在做什么吗?查看我的个人网站GitHub

想联系我吗?请在LinkedIn上联系我

关注我的博客,每两周Medium上获取最新资讯

常问问题

这些是我经常收到的一些问题。希望这个常见问题解答部分能解决您的问题。

  1. 我是初学者,该如何学习前端 Web 开发?
    可以参考以下文章:

    1. 前端流行语
    2. 前端开发路线图
    3. 前端项目构想
    4. 从初学者过渡到中级前端开发人员
  2. 你能指导我吗?

    抱歉,我工作已经很忙了,没时间指导任何人。

文章来源:https://dev.to/ruppysuppy/advanced-git-concepts-you-should-know-nle
PREV
使用 Husky、ESLint、Prettier 在 9 分钟内自动格式化 Git Commit 上的代码 感谢阅读
NEXT
7 个技巧让你的网站性能飞速提升🚀🌙 感谢阅读