第十二天:暂存未完成的修改
小明和小红在开发一个新功能时,他们需要切换到另一个分支去修复一个紧急的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的奥秘,发现更多的故事和技巧。如果你有任何问题或者建议,欢迎你随时联系我,我很乐意和你交流和讨论。