大家好,我是鹏磊。
嘿,伙计们!每天光靠拉拉推推的 Git 操作是要混到什么时候?来点高级货色,让你在同事面前装 X 的时候多一点底气。今天,哥们儿给你带来了 5 个提升效率的 Git 命令,帮你从菜鸟迅速进阶为老鸟!
已收录于,我的技术网站:ddkk.com 里面有,500套技术系列教程、1万+道,面试八股文、BAT面试真题、简历模版,工作经验分享、架构师成长之路,等等什么都有,欢迎收藏和转发。
1. stash:存储临时代码
有时候你写了一半的代码,突然领导叫你修个紧急 bug,手上的改动还不能 commit,这时候就需要 stash 大法。
基本用法
# 存储当前的工作现场
git stash save "修 bug 之前的中断点"
这个命令会把你当前的改动保存起来,包括工作区和暂存区的内容。这样你就可以切换到其他分支去修 bug 了。
# 查看 stash 列表
git stash list
用这个命令可以看到所有 stash 的内容,方便你找到刚刚存储的那一个。
# 恢复之前存储的工作现场
git stash pop
恢复刚才的改动,pop 命令会把存储的改动应用到当前分支,并从 stash 列表中删除。要是你不想删,可以用 git stash apply
。
进阶玩法
# 只存储工作区的改动,不包含暂存区
git stash save --keep-index "仅存储工作区的改动"
这个命令就比较灵活了,适合一些特殊场景,比如你暂存了一部分改动,但还没提交。
# 存储未跟踪文件
git stash save -u "包含未跟踪文件的改动"
一般情况下,stash 不会存储未跟踪文件,用这个命令可以把这些文件也一并保存起来。
2. reset --soft:软回溯
提交后发现有些东西没写好,或者不该提交上去,怎么办?来个软回溯,把 commit 回滚,但保留修改。
基本用法
# 回到上一个 commit,但保留工作目录的改动
git reset --soft HEAD^
这个命令会让你的 HEAD 回到上一个 commit,但是工作区和暂存区的改动都会保留。这样你可以继续修改,再重新提交。
# 回到指定 commit
git reset --soft <commit-hash>
这个命令更强大,可以回滚到任何一个 commit,同样保留改动。
3. cherry-pick:复制 commit
开发分支上写了个牛逼的功能,想赶紧拿到主分支上炫耀?用 cherry-pick,把指定的 commit 应用到当前分支。
基本用法
# 把特定 commit 应用到当前分支
git cherry-pick <commit-hash>
这个命令会把指定的 commit 应用到当前分支,相当于复制了一份改动。非常适合从一个分支把特定改动拿到另一个分支。
进阶玩法
# 处理 cherry-pick 产生的冲突
git cherry-pick --continue
如果 cherry-pick 过程中有冲突,解决完冲突后用这个命令继续。
# 跳过当前冲突的 commit
git cherry-pick --skip
这个命令会跳过当前冲突的 commit,继续应用后面的 commit。
4. revert:撤销 commit
误提交了个 bug,想撤销但不破坏历史记录?revert 就是你的救星。
基本用法
# 撤销特定的 commit
git revert <commit-hash>
这个命令会生成一个新的 commit,反向应用指定的 commit,从而撤销之前的改动。这样历史记录保持完整,非常优雅。
进阶玩法
# 撤销一系列的 commit
git revert <oldest-commit-hash>..<newest-commit-hash>
这个命令可以撤销一系列的 commit,一次性搞定所有需要撤销的改动。
# 自动提交生成的 revert commit
git revert --no-commit <commit-hash>
这个命令会生成一个反向 commit,但不会自动提交,让你有机会先检查一下,再手动提交。
5. reflog:记录 commit 历史操作
手滑误操作了?想找回被 reset 掉的 commit?reflog 是你的时光机!
基本用法
# 查看所有的操作记录
git reflog
这个命令会列出所有的操作记录,包括那些你以为丢失的 commit。每个操作都有一个索引值,可以根据索引恢复到任意一个历史操作点。
# 恢复到某个历史节点
git reset --hard <reflog-index>
使用这个命令,你可以轻松恢复到某个历史节点,把误操作的损失降到最低。
进阶玩法
# 查看某个分支的 reflog
git reflog show <branch-name>
这个命令可以查看某个分支的操作记录,方便你找到特定分支的历史操作。
# 清理 reflog 记录
git reflog expire --expire=now --all
这个命令会清理所有过期的 reflog 记录,保持仓库的整洁。
总结
好了,今天的五个命令绝技就到这里。以后别再天天只会 pull 和 push 了,学会这些高级命令,工作效率提升不说,还能在团队里装 X,成为大家眼中的 Git 高手。