Git 奇幻之旅⌛️续集
第十二天:暂存未完成的修改
小明和小红在开发一个新功能时,他们需要切换到另一个分支去修复一个紧急的 bug 。但是他们的当前分支上还有一些未完成的修改,他们不想提交这些修改,也不想丢弃这些修改。有一天,他们听说了一个叫 stash 的命令,可以让他们暂存这些修改,然后在需要的时候恢复这些修改。他们决定尝试一下,于是他们在终端输入了下面的命令:
git stash # 暂存当前分支上的修改
git checkout master # 切换到 master 分支
git pull origin master # 拉取远程仓库的 master 分支
git checkout -b hotfix # 创建并切换到 hotfix 分支
# 修复 bug 并提交
git checkout master # 切换到 master 分支
git merge hotfix # 合并 hotfix 分支到 master 分支
git push origin master # 推送 master 分支到远程仓库
git branch -d hotfix # 删除 hotfix 分支
git checkout dev # 切换回 dev 分支
git stash pop # 恢复暂存的修改
这样,他们就成功地暂存了未完成的修改,并且在修复 bug 后恢复了这些修改。他们觉得很灵活,因为这样他们就可以在不同的分支上切换了。
但是,有时候 stash 命令也会带来困惑。有一次,小明在恢复暂存的修改时,发现自己之前暂存了多次的修改,但是不知道哪个是最新的。他很迷茫,不知道如何查看和管理这些暂存的修改。有一天,他听说了一个叫 stash list 和 stash apply 的命令,可以让他查看和恢复指定的暂存的修改。他决定尝试一下,于是他在终端输入了下面的命令:
git stash list # 查看所有暂存的修改
git stash apply stash@{1} # 恢复指定的暂存的修改
这样,他就成功地查看和恢复了指定的暂存的修改,并且继续开发新功能。他觉得很清晰,因为这样他就可以管理自己的暂存了。
第十三天:修改最近的提交
小明和小红在提交代码时,有时候会发现自己忘记了添加一些文件,或者写错了提交信息。他们想要修改这些提交,但是又不想重新提交一次。有一天,他们听说了一个叫 commit --amend 的命令,可以让他们修改最近的提交。他们决定尝试一下,于是他们在终端输入了下面的命令:
git add . # 添加所有文件到暂存区
git commit --amend # 修改最近的提交
git push -f origin master # 强制推送到远程仓库
这样,他们就成功地修改了最近的提交,并且覆盖了远程仓库上的提交。他们觉得很方便,因为这样他们就可以避免多余的提交了。
但是,有时候 commit --amend 命令也会带来风险。有一次,小明在修改最近的提交时,不小心把自己的分支推送到了错误的远程分支上。他很惊慌,不知道如何撤回这次推送。有一天,他听说了一个叫 revert 的命令,可以让他用一次新的提交来回滚之前的提交。他决定尝试一下,于是他在终端输入了下面的命令:
git log # 查看提交历史
git revert <commit ID> # 回滚指定的提交
git push origin master # 推送到远程仓库
这样,他就成功地撤回了错误的推送,并且用一次新的提交来记录这次回滚。他觉得很安全,因为这样他就不会影响其他人的代码了。
第十四天:重置代码和切换版本
小明和小红在开发一个新功能时,有时候会发现自己的代码有一些错误或者不满意的地方。他们想要重置代码,使工作区回到过去的某个状态。有一天,他们听说了一个叫 reset 的命令,可以让他们回退到某个版本,并且保留或者丢弃他们的修改。他们决定尝试一下,于是他们在终端输入了下面的命令:
git log # 查看提交历史
git reset --soft <commit ID> # 回退到指定的版本,并且保留修改
git status # 查看修改的状态
git add . # 重新添加修改到暂存区
git commit -m "fix bug" # 重新提交修改
git push -f origin master # 强制推送到远程仓库
这样,他们就成功地重置了代码,并且重新提交了正确的代码。他们觉得很灵活,因为这样他们就可以修改自己的代码了。
但是,有时候 reset 命令也会带来麻烦。有一次,小明在回退版本时,不小心加了一个--hard 选项,导致他的修改全部丢失了。他很慌张,不知道如何找回他的修改提交。有一天,他听说了一个叫 checkout 的命令,可以让他切换到某个版本或者分支。他决定尝试一下,于是他在终端输入了下面的命令:
git reflog # 查看所有的提交历史
git checkout <commit ID> # 切换到指定的版本
git status # 查看修改的状态
这样,他就成功地找回了他丢失的修改,并且切换到了正确的版本。他觉得很幸运,因为这样他就可以继续开发了。
第十五天:查看和恢复删除或者回退的提交
小明和小红在删除或者回退提交时,有时候会发现自己不小心删除或者回退了一些重要的提交。他们想要查看和恢复这些提交,但是又不知道这些提交的 ID 。有一天,他们听说了一个叫 reflog 的命令,可以让他们查看所有的提交历史,包括已经被删除或者回退的提交。他们决定尝试一下,于是他们在终端输入了下面的命令:
git reflog # 查看所有的提交历史
git checkout -b dev <commit ID> # 用指定的提交创建一个新的 dev 分支
git push origin dev # 推送 dev 分支到远程仓库
这样,他们就成功地查看和恢复了删除或者回退的提交,并且创建了一个新的分支。他们觉得很清晰,因为这样他们就可以管理自己的提交了。
但是,有时候 reflog 命令也会带来困惑。有一次,小明在查看所有的提交历史时,发现自己有很多重复或者无用的提交。他很烦恼,不知道如何清理这些提交。有一天,他听说了一个叫 rebase -i 的命令,可以让他交互式地修改提交历史。他决定尝试一下,于是他在终端输入了下面的命令:
git rebase -i HEAD~5 # 交互式地修改最近 5 个提交
# 在编辑器中选择要保留、合并、修改或者删除的提交
git push -f origin master # 强制推送到远程仓库
这样,他就成功地清理了无用的提交,并且修改了提交历史。他觉得很方便,因为这样他就可以优化自己的代码了。
第十六天:拣选特定的提交到另一个分支
小明和小红在开发一个新功能时,他们发现自己的分支上有一些提交是不需要的,或者是需要移到另一个分支上的。他们想要拣选特定的提交到另一个分支,但是又不想影响当前的分支。有一天,他们听说了一个叫 cherry-pick 的命令,可以让他们把特定的提交复制到当前的分支。他们决定尝试一下,于是他们在终端输入了下面的命令:
git log # 查看提交历史
git checkout master # 切换到 master 分支
git cherry-pick <commit ID> # 把指定的提交复制到当前分支
git push origin master # 推送到远程仓库
这样,他们就成功地拣选了特定的提交到另一个分支,并且保持了当前分支的完整性。他们觉得很灵活,因为这样他们就可以移动自己的代码了。
最后
你已经听完了我给你讲的关于 Git 的故事,我很开心能够和你分享这些知识和技巧。我希望这些故事能够帮助你更好地理解和使用 Git ,让你的开发过程更加顺畅和高效。
Git 是一个非常强大和灵活的工具,它可以让你管理和协作你的代码,解决各种问题,创造更多的可能。但是 Git 也有一些复杂和难以掌握的地方,需要你不断地学习和实践,才能真正地掌握它。
我希望你能够继续学习和探索 Git 的奥秘,发现更多的故事和技巧。如果你有任何问题或者建议,欢迎你随时联系我,我很乐意和你交流和讨论。
原文地址: Git 教程从入门到入土
参考地址
Git 奇幻之旅⌛️续集的更多相关文章
- 持续集成一:git上传代码
先注册一个账号,注册地址:https://github.com/ 记住地址 下载git本地客户端,下载地址:https://git-scm.com/download/win 一路next傻瓜安装,加入 ...
- git+jenkins持续集成一:git上传代码
先注册一个账号,注册地址:https://github.com/ 记住地址 下载git本地客户端,下载地址:https://git-scm.com/download/win 一路next傻瓜安装,加入 ...
- Jenkins+Git 持续集成
持续集成是必要的! 希望达到的效果是:开发同事签入代码后,对应的站点可以自动实现更新.目前还只在在内部服务器上实现开发环境中的站点更新,不涉及到线上的发布. 目前使用Jenkins实现这样的持续集成. ...
- cJSON学习笔记 续集
0.前言 本文试图说明怎样使用CJSON构造各种各样的JSON数据包.在前段时间已经写过一篇cJSON的文章,所以本文成为"续集". [相关博文] [前端学 ...
- 转载:超级强大的vim配置(vimplus)--续集
超级强大的vim配置(vimplus)--续集 原文地址:https://www.cnblogs.com/highway-9/p/5984285.html An automatic configura ...
- 【原创】这道Java基础题真的有坑!我也没想到还有续集。
前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏 ...
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
随机推荐
- 4G EPS 的网络协议栈
目录 文章目录 目录 前文列表 LTE/EPC 协议栈 E-UTRAN 空中接口协议栈 用户平面协议 PHY 层 MAC 层 RLC 层 PDCP 层 控制平面协议 RRC 层 NAS 层 EPC 核 ...
- 【数字基座·智慧物联】AIRIOT新品发布会在京举办
2023年6月6日,由航天科技控股集团股份有限公司主办的"数字基座·智慧物联"AIRIOT新品发布会在北京成功举办,重磅发布了AIRIOT 4.0物联网平台的五大核心能力引擎,并邀 ...
- Vue 3.3 发布
本文为翻译 原文地址:宣布推出 Vue 3.3 |The Vue Point (vuejs.org) 今天我们很高兴地宣布 Vue 3.3 "Rurouni Kenshin" 的发 ...
- NET9 AspnetCore将整合OpenAPI的文档生成功能而无需三方库
OpenAPI 规范是用于描述 HTTP API 的标准.该标准允许开发人员定义 API 的形状,这些 API 可以插入到客户端生成器.服务器生成器.测试工具.文档等中.尽管该标准具有普遍性和普遍性, ...
- 三:nacos的配置中心
配置中心的使用: 编辑当前项目的pom.xml,加入必要的依赖配置 <!-- spring-cloud-alibaba-dependencies 依赖同注册中心 --> <depen ...
- 内存取证——volatility学习
前言 在做计算机最后两道题目碰到了MP3格式的镜像,分析发现是计算机内存,要进行内存取证.现在内存取证在ctf比赛中也是常见的题目,内存取证是指在计算机系统的内存中进行取证分析,以获取有关计算机系统当 ...
- 如何从零开始实现TDOA技术的 UWB 精确定位系统(6)
这是一个系列文章<如何从零开始实现TDOA技术的 UWB 精确定位系统>第6部分. 重要提示(劝退说明): Q:做这个定位系统需要基础么? A:文章不是写给小白看的,需要有电子技术和软件编 ...
- itest(爱测试)开源接口测试&敏捷测试管理平台8.1.0发布
(一)itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包分配测试用 ...
- 微信小程序-手持弹幕_文字内容横屏滚动_小程序弹幕源码
哈喽,大家好,我是SCLQ. 最近在抖音刷到手持弹幕的视频,觉得是一个非常有趣应用,在手持弹幕小程序这个软件当中,你可以设置很长一段话,很适合追星.挑战一下自己,做一个小程序的手持弹幕应用. 微信小程 ...
- 双等号==与equals的区别与联系
==与equals的区别与联系: 1)对于双等号==来说,比较的是值是否相等 如果双等号比较的是基本数据类型的变量,则直接比较变量的值是否相等, 如果双等号比较的是引用类型的变量,则比较的是所指向对象 ...