猫咪版 Git 命令图解

猫咪版 Git 命令图解

这套图来自国外创作者 Lynn Skursky 的”Git Purr”系列,用猫咪的行为类比 Git 核心命令,画风幽默但讲得挺准确。第一次看到时感觉比很多文字教程直观,收藏下来,顺手加了一些自己的理解注释。

图里的角色说明:猫咪对应本地仓库,云端/猫咪聚集地对应远程仓库,毛球/玩具对应 commit。


git purr(git pull)

Git pull explained with cats

git pull = git fetch + git merge。从远端把最新的 commit 抓下来,直接合到当前分支。

日常用得最多,但多人协作时容易产生一堆多余的 merge commit,让提交历史看起来乱。如果想保持线性历史,可以改用 git pull --rebase


git meowge(git merge & git rebase)

Git merge explained with cats

merge:把两个分支的历史合并,保留所有提交记录,会产生一个 merge commit。历史真实,但图形复杂。

rebase:把当前分支的提交”搬”到目标分支的末端,历史是线性的,看起来干净。代价是改写了 commit 的 hash,已推送到远端的分支不要随意 rebase,会让协作者的历史乱掉。

我的习惯:个人开发分支用 rebase 保持历史整洁,向主干合并用 merge 保留分支记录。


git puss(git push)

Git push explained with cats

把本地的 commit 推到远端。如果远端有你没有的新提交,push 会被拒绝,需要先 pull 再 push。

踩过一次坑:feature 分支 rebase 完之后强推(git push -f)把同事的提交覆盖了。后来改成 git push --force-with-lease,这个命令在远端有别人的新提交时会拒绝推送,安全很多。


git cherry-pick & git log

Git cherry-pick explained with cats

cherry-pick:从其他分支”摘”一个或几个 commit 过来,不需要整个分支的改动。

用过最典型的场景:hotfix 分支修了一个线上 bug,需要同步到开发分支,但开发分支还有一堆未完成的功能不能直接 merge。这时候 cherry-pick 单独把那个修复 commit 拿过来就够了。