前言
大部分公司都在使用git作为项目代码的管理工具,本篇文章主要讲常用的git命令
基础
- 生成
id_rsa和id_rsa_pub - 将
id_rsa_pub添加到github或者gitlab的sshkey目录里
ssh-keygen -t rsa -C "your_email@example.com"
查询本地git配置
git config --global --list
修改全局git用户的邮箱和名字
git config --global user.name "xxx"
git config --global user.email "xxx@xx.com"
将本地项目初始为git仓库
git init
从远程仓库克隆代码到本地,默认master分支
git clone https://gitlab.com/path [项目名] 可自定义项目名
查看当前工作区的文件状态
git status
git status -s 精简输出的文字格式,只显示文件名
添加忽略文件.gitignore
# 忽略所有以~结尾的文件
*~
# 忽略所有的 .js 文件
*.js
# 但跟踪所有的 lib.js,即便你在前面忽略了 .js 文件
!lib.js
# 只忽略当前目录下的 json 文件,而不忽略 src/.json
/.json
# 忽略任何目录下名为 dist 的文件夹
dist/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
移除index暂存区的修改记录
git rm -r --cached 可以使.gitignore立即生效,但是不建议
将工作区内容添加到index暂存区
git add home.vue 单个文件
git add src/ 指定目录
git add src/*.vue 同类型文件
git add src/ static/ config/ 多个目录
git add * 所有状态变更的文件
提交内容到本地仓库的当前分支
git commit -m 'xxx'
git commit -am 'xxx' 合并add和commit操作
从远程指定分支拉取代码到本地工作区,fetch是只拉取不修改本地内容,pull是拉取并合并本地内容,如果远程代码与本地代码有合并冲突,git pull将失败
git fetch origin master
git pull origin master
将代码推送到远程指定分支
git push origin master
当然每次这么输入有点麻烦,可以这样设置
git push --set-upstream origin <branch>
可以简写为
git push -u origin <branch>
下次直接
git push
git push -f 强制提交
分支 git branch
查看分支
git branch 查看本地分支
git branch -r 查看远程分支
git branch -a 查看所有分支
git branch -v 查看每一个分支的最后一次提交
git branch --merged 哪些分支已经合并到当前分支
git branch --no-merged 哪些分支未合并到当前分支
创建分支
git branch <new branch> 创建分支
git checkout <new branch> 将新分支的代码放在工作区
合并操作
git checkout -b <new branch> 创建分支并切到新分支上
合并分支
git merge <branch> 将branch合并到当前分支,前提是branch是clean的(没有未提交)
git rebase <branch> 将当前分支(相对于同一个祖先提交)的修改拷贝一份,然后快进到<branch>的后面
将指定文件从其他分支检出到当前工作区(当前文件会被覆盖掉)
git checkout <branch> <file> 将branch的指定文件检出到当前分支的工作区
删除指定本地分支
git branch -d <branch> 如果有未合并内容,会删除失败,
git branch -D <branch> 可以使用-D强制删除
标签 git tag
查看标签
git tag 查看所有tag
git tag -l "v1*" 查看v1版本开头的tag
git show v1.0.0 查看指定的标签
创建轻量标签
git tag v1.0.0
创建附注标签 包含打标签者的名字、电子邮件地址、日期时间
git tag -a v1.0.0 -m "version 1.0.0"
后期打标签
git log --pretty==oneline 查看提交记录
git tag -a v2.0 -m 'verison 2.0' <commit id> 给指定的提交补上标签
远程 git remote
查看远程信息
git remote show origin
删除指定远程分支
git push origin -d <branch>
贮藏 git stash
把还没提交的文件贮藏起来,然后可以切换到别的分支工作,
git stash 贮藏当前分支上的未提交的文件
git stash list 查看贮藏堆栈
git stash apply 应用最近的贮藏
git stash apply [stash@{2}] 应用指定的贮藏
git stash drop [stash@{2}] 移除堆栈指定的贮藏
更方便的用法
git stash pop 应用后就移除
git stash clear 清空贮藏堆栈
记录 git log/git reflog
查看当前分支提交记录
git log
git log --pretty==oneline 单行显示
显示整个本地仓储的commit, 包括所有branch的commit, 甚至包括已经撤销的commit,
git reflog 只要HEAD发生了变化, 就会在reflog里面看得到
比较 git diff
git diff -- /src 对比工作区(未 git add)和暂存区(git add 之后)
git diff --cached -- /src 对比暂存区(git add 之后)和版本库(git commit 之后)
git diff HEAD -- /src 对比工作区(未 git add)和版本库(git commit 之后)
撤回操作
在任何一个阶段,你都有可能想要撤消某些操作
重新提交,覆盖上次的提交,不会生成多余的commit记录
git commit -m '趁经理没发现,重新提交' --amend
回滚到指定commit的时候并覆盖当前工作区内容,!!指定commit之后的提交将丢弃!!,git log查不到原先commit之后的内容
git reset --hard <commit id>
回滚一个指定版本,进入reverting状态,重新提交,在git log中都是有记录的
git revert -n <commit id>
git add
git commit
撤销暂存区的修改(将HEAD指向上一次的commit)
git reset HEAD <file>
放弃工作区的文件修改(相当于回到上一次commit之后的文件状态)
git checkout -- <file>