第十二天:暂存未完成的修改

小明和小红在开发一个新功能时,他们需要切换到另一个分支去修复一个紧急的 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 奇幻之旅⌛️续集的更多相关文章

  1. 持续集成一:git上传代码

    先注册一个账号,注册地址:https://github.com/ 记住地址 下载git本地客户端,下载地址:https://git-scm.com/download/win 一路next傻瓜安装,加入 ...

  2. git+jenkins持续集成一:git上传代码

    先注册一个账号,注册地址:https://github.com/ 记住地址 下载git本地客户端,下载地址:https://git-scm.com/download/win 一路next傻瓜安装,加入 ...

  3. Jenkins+Git 持续集成

    持续集成是必要的! 希望达到的效果是:开发同事签入代码后,对应的站点可以自动实现更新.目前还只在在内部服务器上实现开发环境中的站点更新,不涉及到线上的发布. 目前使用Jenkins实现这样的持续集成. ...

  4. cJSON学习笔记 续集

    0.前言     本文试图说明怎样使用CJSON构造各种各样的JSON数据包.在前段时间已经写过一篇cJSON的文章,所以本文成为"续集".     [相关博文]     [前端学 ...

  5. 转载:超级强大的vim配置(vimplus)--续集

    超级强大的vim配置(vimplus)--续集 原文地址:https://www.cnblogs.com/highway-9/p/5984285.html An automatic configura ...

  6. 【原创】这道Java基础题真的有坑!我也没想到还有续集。

    前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏 ...

  7. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  8. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  9. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  10. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

随机推荐

  1. 给公众号接入`FastWiki`智能AI知识库,让您的公众号加入智能行列

    最近由于公众号用户太多,我就在思考有啥方式能给微信公众号的粉丝提供更多的更好的服务?这个时候我就想是否可以给公众号接入一下AI?让用户跟微信公众号对话,然后还能回到用户的问题,并且我提供一些资料让AI ...

  2. 🐬记一次MySQL执行修改语句超时问题

    异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was di ...

  3. CF527E Data Center Drama 题解

    目录 题目 题意 题解 思路 详解 注意事项 代码 AC 记录 尾声 题目 CF527E Data Center Drama · 戳这里 题意 给定一张 $n$ 个点 $m$ 条边的连通无向图. 你需 ...

  4. 关于《Java并发编程之线程池十八问》的补充内容

    一.写在开头 在上一篇文章我们写<Java并发编程之线程池十八问>的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充. 二.Runnable v ...

  5. OpenCV笔记(7) 轮廓

    1. 查找轮廓 FindContours public static void FindContours(InputOutputArray image, //输入8-bit单通道的图片 out Mat ...

  6. 01-布局扩展-BFC完成圣杯布局

    <!DOCTYPE html>   <html lang="en">   <head>   <meta charset="UTF ...

  7. 视图结构 wxml 列表渲染 for

    WXML是框架设计的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构. wxml是一个严格的标记性语言,有开始就必须有结束,单标签就一个有结束符 5.1.数据绑定 在js逻辑层中定义数据源, ...

  8. 【译】Visual Studio 17.10 发布了新版扩展管理器

    我们将更新的扩展管理器带给所有用户!在过去的一年里,我们已经将更新后的扩展管理器作为可选的预览功能提供,并一直期待您的反馈.基于您令人难以置信的反馈,我们现在准备从 Visual Studio 17. ...

  9. VictoriaLogs 要凭什么革了各家日志存储的命

    如果大家对时序指标的存储方案有些了解,那大概率会听过 VictoriaMetrics,VictoriaMetrics 号称 Prometheus 的升级版,在性能和成本方面也确实做得很好,如果是夜莺新 ...

  10. 安装并使用 openssl 生成证书

    1. 安装 openssl参考链接: OpenSSL加密算法库使用系列教程_openssl算法哭调用-CSDN博客 安装包下载地址: 安装包下载地址(正常情况需要将 openssl 源码下载后, 自己 ...