哈士奇的实习生活:git仓库是怎么把哈士奇心态搞炸的
仔细算算哈士奇在公司工作也有差不多一个月了,从最开始的看代码,到接第一个需求,再到现在走上正轨,虽然没有感觉到时间的流逝,但是也逐渐变成一个老油子了。最近哈士奇因为git仓库的事情搞得头皮发麻,所以写文章记录一下哈士奇的错误经验,也希望能给后面的实习的同学一些帮助。
哈士奇在公司里面主要碰到了两个问题:stash和branch
问题一
第一个问题是stash引起的,stash的作用是帮助大家把代码添加到暂存区,并且将代码恢复到操作之前到状态,哈士奇在网上看到了stash的强大功能直接上代码,导致自己代码全部消失了......那么,首先让我们来了解一下git stash是什么。
Git Stash
概念
Git stash
用于临时保存当前工作目录的未提交更改(包括已暂存和未暂存的内容),以便你可以切换到其他分支或执行其他操作,而无需提交这些更改。
内容和属性
- 存储临时更改:
stash
会保存当前工作目录中的所有未提交更改。 - 堆栈结构:
stash
以堆栈(栈)的方式保存多个stash
条目,最新的stash
在栈顶。(也就是说我们刚开始保存的最新的在stash@{0}里面) - 唯一标识:每个
stash
条目都有一个唯一标识,可以通过该标识来应用或删除特定的stash
。
应用场景
- 临时切换分支:在需要切换分支但当前工作目录有未提交更改时,可以使用
stash
临时保存这些更改。 - 试验性更改:在尝试一些实验性更改但不想立即提交时,可以使用
stash
保存当前工作进度。 - 合并冲突解决:在解决复杂的合并冲突时,可以使用
stash
保存部分解决方案。
优缺点
- 优点:
- 快速保存和恢复未提交更改。
- 允许在未提交更改的情况下切换分支。
- 支持多个
stash
条目,灵活管理。
- 缺点:
- 易于丢失:如果不及时应用或删除
stash
,可能会遗忘存储的更改。 - 依赖开发者管理:需要开发者主动管理
stash
条目,否则可能造成混乱。
- 易于丢失:如果不及时应用或删除
常用命令
git stash
:保存当前工作目录的更改。git stash list
:列出所有stash
条目。git stash apply [<stash>]
:应用指定的stash
条目。git stash pop
:应用并删除最新的stash
条目。git stash drop [<stash>]
:删除指定的stash
条目。git stash clear
:一次性删除所有stash
条目。
提醒
哈士奇建议没有一定对git了解的小伙伴还是先从branch开始了解,stash操作不当很容易导致代码混乱而重新恢复代码。
问题二
由于切换分支以及stash暂存区的改变导致哈士奇第二次写好的代码全部消失,甚至文件夹也不见了。主要原因是因为分支切换导致全部代码恢复到主分支的状态,所以代码消失了(还好哈士奇commit了代码能直接恢复回来)
Git Branch
概念
Git branch
是用于创建不同开发路线的独立工作区。每个分支都是一个独立的代码版本,你可以在分支上进行开发,而不会影响主分支(例如 main
或 master
)。
内容和属性
- 独立的工作区:每个分支都有自己的提交历史和工作目录。
- 轻量级:分支创建和切换非常轻量,不会占用太多资源。
- 分离的历史记录:每个分支都有独立的提交历史,可以并行开发。
应用场景
- 功能开发:为每个新功能创建一个独立的分支,方便开发和测试。
- 修复漏洞:在独立分支上修复漏洞,完成后合并到主分支。
- 实验性开发:在独立分支上进行实验性开发,不影响主代码库。
优缺点
- 优点:
- 并行开发:允许多个开发人员同时开发不同功能。
- 清晰的代码历史:每个分支有独立的提交历史,清晰记录开发过程。
- 安全性:可以在独立分支上进行风险较高的开发,不影响主分支的稳定性。
- 缺点:
- 需要合并:开发完成后需要将分支合并到主分支,可能会产生冲突。
- 管理成本:需要合理管理分支,避免分支过多导致混乱。
常用命令
git branch
:列出所有本地分支。git branch <branch-name>
:创建新分支。git checkout <branch-name>
:切换到指定分支。git merge <branch-name>
:合并指定分支到当前分支。git branch -d <branch-name>
:删除指定分支。
提醒
在我们开发的时候,大家的合作伙伴通常会叫大家在本地创建分支,然后再进行合并push,所以大家尽量不要在本地master开发,现在分支里面根据相对应的需求进行开发,最后合并的时候再统一合并。
总结
-
Git Stash:
- 用于临时保存未提交的更改。
- 应用场景包括临时切换分支、试验性更改、合并冲突解决。
- 优点是快速保存和恢复未提交更改,缺点是易于丢失。
-
Git Branch:
- 用于创建独立的工作区,支持并行开发。
- 应用场景包括功能开发、修复漏洞、实验性开发。
- 优点是并行开发、清晰的代码历史、安全性,缺点是需要合并和管理成本。
大家平时一定要注意及时 git add +git commit -m 相关的代码,不然出现问题神仙难救。
这里再推荐 git reflog + git cherry-pick 哈希码配合上面的提交 简直是造作自己仓库的绝妙搭配 使用git reflog找到相对应的提交记录以后,直接使用 git cherry-pick 加上前面的黄色哈希码,恢复丢失记录。
恢复命令
git reflog
:显示所有曾经的操作(从上到下分别为从近到远)。git checkout <branch-name>
:切换到指定分支(如果你没切换分支的话记得先切换分支)。git cherry-pick <hash>
:恢复特定记录的代码。
希望大家看到这篇文章以后不会和哈士奇一样因为分支和暂存问题找很久代码。
转载自:https://juejin.cn/post/7371266185633431552