记不住Git那么命令?动图展示10个Git常用命令,建议收藏!
![](https://filescdn.proginn.com/5c5b72338359a3fa89f1bf19ccdb00a5/9a3d6b342b6774803bcc2d76b3171ec4.webp)
git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道这些 git 命令执行的究竟是什么任务吗?如果你还有些分不清楚,那千万不能错过这篇文章。在本文中,熟知 JavaScript、TypeScript、GraphQL、Serverless、AWS、Docker 和 Golang 的 21 岁年轻软件顾问 Lydia Hallie 通过动图形式直观地介绍了这些常用 git 命令的工作过程,包你过目不忘。
![](https://filescdn.proginn.com/a52e4438feffcd8554efadf278c3ec83/5227cb5b1aae1a5bae1642b1cfbdc47b.webp)
![](https://filescdn.proginn.com/73fdbde5c9f697faf89a01caa5b4685d/17b9de4fdc38fef9e20d26e32b117e21.webp)
当尝试合并这些分支时,Git 会向你展示冲突出现的位置。我们可以手动移除我们不想保留的修改,保存这些修改,再次添加这个已修改的文件,然后提交这些修改。
![](https://filescdn.proginn.com/f001eaada466dec4824f502372e36645/4b35f40d942fe9d39bed3df13e5f078a.webp)
![](https://filescdn.proginn.com/5d81c59d5b9075e2214f023ae1024cf9/7d6b106f37db7017e2d88176c868f40a.webp)
在我们正在 rebase 的提交上,我们可以执行以下 6 个动作:
reword:修改提交信息;
edit:修改此提交;
squash:将提交融合到前一个提交中;
fixup:将提交融合到前一个提交中,不保留该提交的日志消息;
exec:在每个提交上运行我们想要 rebase 的命令;
drop:移除该提交。
![](https://filescdn.proginn.com/3e222a9319020a9f69568b7e99047897/cda10387cccc055c308bd40b4d4b66b9.webp)
![](https://filescdn.proginn.com/bb64987b3b84eee119f65ff527ba3dfc/640a2c61d061c0c5aa8a1375140c684b.webp)
当我们不想要之前提交的修改时,就会用到这个命令。也许这是一个 WIP 提交或者可能是引入了 bug 的提交,这时候就要执行 git reset。
git reset 能让我们不再使用当前台面上的文件,让我们可以控制 HEAD 应该指向的位置。
软重置
软重置会将 HEAD 移至指定的提交(或与 HEAD 相比的提交的索引),而不会移除该提交之后加入的修改!
假设我们不想保留添加了一个 style.css 文件的提交 9e78i,而且我们也不想保留添加了一个 index.js 文件的提交 035cc。但是,我们确实又想要保留新添加的 style.css 和 index.js 文件!这是软重置的一个完美用例。
![](https://filescdn.proginn.com/bb877f50d81ade86e298a8144575fd93/32fbb33866fdf39c9ed2cf6c00f11e81.webp)
有时候我们并不想保留特定提交引入的修改。不同于软重置,我们应该再也无需访问它们。Git 应该直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改。
![](https://filescdn.proginn.com/26321db222a40ccce90c2c664c24b3b9/77ae86359ff865702372ade7c1beaec8.webp)
假设 ec5be 添加了一个 index.js 文件。但之后我们发现其实我们再也不需要由这个提交引入的修改了。那就还原 ec5be 提交吧!
![](https://filescdn.proginn.com/9bad6e277fb145fb56c575534bedb80b/399b89d775a2d44dbaaddcffb28fea87.webp)
![](https://filescdn.proginn.com/43d98627292e72c4a0c9c17e4fc048aa/f7b943696f1e63f31686b650b3da3b60.webp)
通过在这个远程分支上执行 git fetch,我们就可在本地获取这些修改。这不会以任何方式影响你的本地分支:fetch 只是单纯地下载新的数据而已。
![](https://filescdn.proginn.com/ace2935780fb6c141408076dbf2459bb/ed021db08562821b0f10cca92aa4bc65.webp)
![](https://filescdn.proginn.com/12f935d6aeb0c66558b74399b7852b2a/a4daaff6fc60ab934aae70e216fd3c04.webp)
git reflog 是一个非常有用的命令,可以展示已经执行过的所有动作的日志。包括合并、重置、还原,基本上包含你对你的分支所做的任何修改。
![](https://filescdn.proginn.com/12cf14f9cdbeacef4d175e9a8b895b3e/4b5523847a26155b5efb385fbfde8a4d.webp)
假设我们实际上并不需要合并原有分支。当我们执行 git reflog 命令时,我们可以看到这个 repo 的状态在合并前位于 HEAD@{1}。那我们就执行一次 git reset,将 HEAD 重新指向在 HEAD@{1} 的位置。
![](https://filescdn.proginn.com/6fc6393259c8040f1f3298fd273d7d77/b1002ba5578e744710ac9b8b2617df13.webp)
![](https://filescdn.proginn.com/ba2aeffc07c7127254c96c7e60be816a/d226392705ee9a4bd566f6c2348be1b9.webp)
![](https://filescdn.proginn.com/ad93fe3f33a74fef83eb9f24e589f342/208d814e0e05129a75819aaa42f8dd8c.webp)
卧槽:第一次见这么牛x的网站!
![](https://filescdn.proginn.com/79c9418f9901c966b759b0874115ef3f/c59db119b97da04dfbc116c9419fe3cb.webp)
一招教你查看微信朋友圈访客记录!
![](https://filescdn.proginn.com/6604b0baa99dc09e48d2fbb98dc44334/a3ce333be8d7bb5b7b1b460bf6747411.webp)
一招搞定github下载速度到2MB/s
评论