尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

常用Git指令总结

常用Git指令总结 本文总结了git中最常用的命令。基本用法上面五条命令在工作目录、暂存目录和本地仓库之间修改文件。git add files把当前工作目录下files的修改放到暂存目录git add .将所有修改加入暂存目录。git commit -m xxx将暂存目录生成快照并提交到本地仓库提交的信息为xxx。git reset --soft HEAD^用来撤销最后一次commit的所有文件回到暂存目录。git checkout -- files把文件从暂存目录撤回到工作目录用来丢弃本地修改。命令解释git diff有时需要查看两次提交之间的变动。git diff相对于暂存目录查看本地目录的变动。git diff --cached相对于本地仓库查看暂存目录的变动。git diff HEAD相对于本地仓库查看本地目录的变动。git diff b325c da985查看b325c和da985两次提交之间的改动。git commit --amend如果想更改上一次提交使用git commit --amend。git会使用与当前节点相同的父节点进行一次新的提交上一次的提交会被取消但是内容存在。该命令也可以用于修改上一次提交信息。git cherry-pickgit cherry-pick commitID命令表示将commitID这个提交节点在当前分支做一次完全一样的提交。在main分支操作git cherry-pick 2c33a将topic分支中2c33a这笔提交copy过来。git rebasegit rebase是不同于git merge的一种合并命令。git merge合并是把两个父分支合并进行一次新提交提交历史不是线性的。而git rebase衍合在当前分支上重演另外一个分支的所有历史提交提交历史是线性的本质上这是线性的自动化cherry-pick操作。git merge在main分支的ed489节点进行git merge other操作将当前提交ed489和other分支的提交以及他们的共同祖父节点b325c进行一次三方合并。结果是先保存工作目录和暂存区域然后做一次新提交f8bc5。git rebase在topic分支进行git rebase main操作在公共祖父节点处重演main分支中三次提交b325cc10b9da985形成线性的提交。同样git rebase -i HEAD~n可以让你更加方便地完成一些复杂的操作比如丢弃、重排、修改、合并最后n次提交。git loggitloggitlog-pgitlog--onelinegitreflog用git log可以查看详细的提交历史用git log -p可以查看详细的提交历史和每次提交的修改内容用git log --oneline可以查看简略的提交历史。HEAD指向的提交就是当前的提交因此使用命令git reset --hard commitID可以让我们在所有的历史提交之间切换。如果不小心切回到某个历史提交那么如何切回未来的某个提交呢要重返未来用git reflog查看历史提交以便确定要回到未来的哪个提交。git stash有时当你在工作目录修改了一些文件所有东西都进入了混乱的状态 而这时你想要切换到另一个分支做一点别的事情比如处理紧急的bug。 问题是你不想为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。贮藏stash会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上 而你可以在任何时候重新应用这些改动甚至在不同的分支上。暂存现状gitstash# 直接添加到栈上gitstash savetips info# 添加到栈上并添加了提示信息显示暂存gitstash list恢复暂存gitstash pop# 恢复到最新的操作list中就不存在该stash了gitstash pop stash{num}# 恢复指定的stashgitstash apply# 恢复到最新的操作list中就还存在该stashgitstash apply stash{num}# 恢复指定的stash使用场景开发流程开发时通常新建一个dev分支修改代码然后将修改的代码合并到master分支上再用master分支提交代码和远程仓库同步。这样的好处是每次合并到master分支前可以git pull更新然后再merge不容易出错提交的历史比较漂亮即使有紧急的bug在master分支新建一个bug分支进行处理就可以了不影响dev分支的开发。gitcheckout-bdev# coding-add-commitgitcheckout mastergitpullgitcheckout devgitrebase mastergitcheckout mastergitmerge devgitpush打patch假如客户有一个紧急的bug需要解决此时需要修改代码后提供一份patch给客户马上可以使用。用git diff生成的标准patch。gitdiffxxx.patch# 生成patch# 将xxx.patch提供给客户客户打上该patch立马修复buggitapply xxx.patch# 应用patch要生成两个commit之间的patch也可以使用git diff命令实现。gitdiffcommit-old commit-newold2new.patch最好在添加更改文件的before和after版本以防客户的仓库版本和你本地的仓库版本不一致打不上patch此时就可以用对比工具看具体的改动直接添加。before表示修改前的文件after表示修改后的文件配置别名配置别名可以偷懒少敲几个字母。gitconfig--globalalias.co checkoutgitconfig--globalalias.st statusgitconfig--globalalias.cm commitgitconfig--globalalias.br branchgitconfig--globalalias.unstagereset HEADgitconfig--globalalias.lastlog -1gitconfig--globalalias.lglog --color --graph --prettyformat:%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset --abbrev-commit简化后的指令gitcogitstgitcmgitbrgitunstagegitlastgitlggit commit模板配置清晰和规范的commit信息有助于查看历史修改记录通过配置commit模板规范每次提交的commit信息只需填写必要的信息即可提升效率和规范。创建commit模板文件在/home/name/.git/路径下创建commit_msg.template模板文件commit_msg.template内容如下fix(模块):描述#具体描述[root cause][solution][test]# type 字段包含:# feat新功能feature# fix修补bug# docs文档documentation# style 格式不影响代码运行的变动# refactor重构即不是新增功能也不是修改bug的代码变动# test增加测试# chore构建过程或辅助工具的变动# scope用于说明 commit 影响的范围比如数据层、控制层、视图层等等。# subject是 commit 目的的简短描述不超过50个字符# Body部分是对本次 commit 的详细描述可以分成多行# Footer用来关闭 Issue或以BREAKING CHANGE开头后面是对变动的描述、以及变动理由和迁移方法配置commit模板路径和编辑器设置模板路径其中path就是commit模板路径gitconfig--globalcommit.template /home/name/.git/commit_msg.template设置模板使用vim软件打开gitconfig--globalcore.editorvim修改文件本地commitgitadd.// 添加工作区的修改文件到缓存区gitcommit // 该命令会自动弹出如下弹框只需编辑后面的内容即可参考图解Git
返回列表