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 ...
随机推荐
- CSS动画-数字轮盘滚动效果实现(组件封装,快速使用)
效果图: 原理分析:这玩意就和垂直方向的轮播图差不多,只是把轮播的图换成数字 主要实现:父组件:父组件接收一个curNum属性,这个属性代表当前需要显示的数字.它将这个数字传递给子组件AnimateN ...
- NumPy 随机数据分布与 Seaborn 可视化详解
随机数据分布 什么是数据分布? 数据分布是指数据集中所有可能值出现的频率,并用概率来表示.它描述了数据取值的可能性. 在统计学和数据科学中,数据分布是分析数据的重要基础. NumPy 中的随机分布 N ...
- 上位机开发福利!快速掌握.NET中的Modbus通信
安装nuget包 Wesky.Net.OpenTools 1.0.8或以上版本.支持.net framework 4.6以上版本,以及所有.net core以及以上版本引用. 开发一个简单的Winf ...
- MyBatis日志模块源码分析
MyBatis源码的logging包下是日志模块的相关实现,Mybatis日志模块通过适配器模式和代理模式优雅的实现了SQL日志的输出功能. 一. 适配器模式实现了MyBatis对第三方日志框架的适配 ...
- CSS操作——文本属性
1.font-style(字体样式风格) /* 属性值: normal:设置字体样式为正体.默认值. italic:设置字体样式为斜体.这是选择字体库中的斜体字. oblique:设置字体样式为斜体. ...
- Python的进程和线程——一些基础概念
1. 线程和进程 1.1 线程和进程 进程可以包含多个并行运行的线程: 通常,操作系统创建和管理线程比进程更省CPU资源: 线程用于一些小任务,进程用于繁重的任务: 同一个进程下的线程共享地址空间和其 ...
- Stable Diffusion WebUI详细使用指南
Stable Diffusion WebUI(AUTOMATIC1111,简称A1111)是一个为高级用户设计的图形用户界面(GUI),它提供了丰富的功能和灵活性,以满足复杂和高级的图像生成需求.由于 ...
- 利用 Helm 在各类 Kubernetes 中安装 Rainbond
利用 Helm 安装 Rainbond 好雨科技技术团队一直致力于让用户更方便的安装 Rainbond 这款产品. 不久前,我们刚刚推出了在一个容器中部署 Rainbond 的快速安装方式,这种方式覆 ...
- elementUI slider组件,带范围选择实现双向绑定
网上查过很多相关文章都没有一章是写element ui滑块带范围实现双向绑定 二个滑块二头的数据怎么得到 我的需求是做个时间轴要滑动选择不同的时间 开始很难做最后一点一点摸索得出的结论 好在写出来了先 ...
- 判断日期是否为周六周日,BigDecimal比较大小
判断日期是否为周六周日,BigDecimal比较大小 package com.example.core.mydemo.date; import java.math.BigDecimal; import ...