V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
JustW
V2EX  ›  程序员

Git 奇幻之旅⌛️续集

  •  6
     
  •   JustW · 2023-06-14 09:29:11 +08:00 · 1163 次点击
    这是一个创建于 560 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    小明和小红在开发一个新功能时,他们需要切换到另一个分支去修复一个紧急的 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 教程从入门到入土

    参考地址

    4 条回复    2023-06-14 10:47:13 +08:00
    Ryanel
        1
    Ryanel  
       2023-06-14 09:46:28 +08:00
    OP 辛苦,👍
    lyxeno
        2
    lyxeno  
       2023-06-14 09:51:34 +08:00
    git reflog 真是神奇...👍

    push -f 还是尽量不要在有多人开发的分支里用,容易被同事喷
    wjx0912
        3
    wjx0912  
       2023-06-14 10:34:12 +08:00
    都续集了,还不提小明小红结婚没有
    JustW
        4
    JustW  
    OP
       2023-06-14 10:47:13 +08:00
    @wjx0912 说不定小明和小红都是男的咧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5865 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:22 · PVG 10:22 · LAX 18:22 · JFK 21:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.