git 使用笔记
细一点的教程可以看
30分钟学会使用Git | 程序师 - 程序员、编程语言、软件开发、编程技术
一般先创建秘钥
ssh-keygen -t rsa -C ***你的邮箱
如果多个项目有不同地址比如一个github 一个码云就参考Windows下Git多账号配置,同一电脑多个ssh-key的管理 - popfisher - 博客园
之后添加到设置里面ssh
git clone xxx//ssh or https
一般创建并切换分支开始开发
git checkout -b dev
提交就是常规的
git add . //添加所有修改
git status //查看所有改动
git commit -m '提交说明' //提交本地仓库
git pull //如果冲突就先解决冲突
git push //推送
git branch //查看分支
git branch <name> //创建分支 分支名
git checkout <name> //切换分支 分支名
git checkout -b <name> //创建+切换分支 分支名
git merge <name> //合并某分支到当前分支 分支名
git branch -d <name> // 删除分支 分支名
之后远程仓库如果没有这个分支就用下面这个提交
git push -u origin 分支名
查看某个文件的相关修改 后面跟路径
git log --pretty=oneline filepath
commit之后后悔了怎么办
git reset --hard commit_id //HEAD 就是当前版本
git reset --hard HEAD^//上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --soft HEAD^
--mixed //意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft //不删除工作空间改动代码,撤销commit,不撤销git add .
--hard //删除工作空间改动代码,撤销commit,撤销git add .
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
修改还未push的注释:
git commit --amend// i 开始编辑 esc 退出编辑模式 :wq 保存
刚刚push到远端还没有人其他人下载或改动的:
用同样的命令修改后保存退出。
再使用git push --force-with-lease origin master
git checkout commit_id hello.txt //将hello.txt回滚到最初的状态,需要指定回滚到哪个提交,以及文件的全路径。
git commit --amend// i 开始编辑 esc 退出编辑模式 :wq 保存
git 配置别名 下面是我使用的
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.cm 'commit -m'
git config --global alias.br branch
//设置git lg 为 格式化后的git log
git config --global alias.lg "log --color --graph --pretty=format:'-%Cred%h%Creset %C(bold blue)<%cn>%Creset %s %Cgreen(%cr) %C(yellow)%d%Creset ' --abbrev-commit"
假设我们正在一个新的分支做新的功能,这个时候突然有一个紧急的bug需要修复,而且修复完之后需要立即发布。需要暂时切到别的分支,修复完bug再切回来,而且代码也能保留
这个时候 需要stash 命令就大有用处了,前提是我们的代码没有进行 commit
git stash //把当前分支所有没有 commit 的代码先暂存起来
git stash list //查看暂存区记录
git stash apply // 恢复暂存
git stash pop //还原 stash并且 记录删除
git stash drop //删除最近一条的 stash 记录
git stash clear //清空所有暂存区的记录
比较不同
git diff <$id1> <$id2> // 比较两次提交之间的差异
git diff <branch1>..<branch2> // 在两个分支之间比较
git diff --staged // 比较暂存区和版本库差异
大部分项目中,会有写文件,文件夹是我们不想提交的。为了防止一不小心提交,我们需要gitignore文件:
- 在项目根目录创建.gitignore文件
- 在文件中列出不需要提交的文件名,文件夹名,每个一行
- .gitignore文件需要提交,就像普通文件一样
通常会被ignore的文件有:
- log文件
- task runner builds
- node_modules等文件夹
例如:
*.log
build/
node_modules/
想删除已经提交文件的跟踪:
git rm -r -n --cached "你的目录或者文件" // -n:加上这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览。(只用于展示,给你看的)
git rm -r --cached "你的目录或者文件" //最终执行命令.
Git提交时会写一些说明提现本次提交的所作所为一般 使用
type(本次提交的类型)
、scope(本次提交的影响范围)
、subject(commit 目的的简短描述)
其中 type一般以下几种:
- build: 影响构建系统或外部依赖关系的更改(示例范围:gulp,-broccoli,npm)
- ci: 更改我们的持续集成文件和脚本(e.g.: Travis,GitLab等)
- docs: 仅文档更改
- feat: 一个新功能
- fix: 修复错误
- perf: 改进性能的代码更改
- refactor: 代码更改,既不修复错误也不添加功能
- style: 不影响代码含义的变化(空白,格式化,缺少分号等)
- test: 添加缺失测试或更正现有测试
- chore: 构建过程或辅助工具的变动
- release: 版本发布
- revert: 特殊情况,当前 commit 用于撤销以前的 commit