Git系列 (02):git常用命令


生成Git密匙

ls ~/.ssh  # 查看是否有rsa文件
ssh-keygen -t rsa -C "email@qq.com"  # 生成ssh key文件
cat ~/.ssh/id_rsa.pub  # 查看公钥

commit提交规范

  • feat : 新功能【技艺、功绩】
  • fix : 修复bug
  • perf : 优化相关,比如提升性能、体验
  • docs : 仅仅修改了文档,比如README...
  • style : 代码格式改变,修改了空格、缩进格式、逗号等,不改变代码逻辑
  • refactor : 某个已有功能重构或目录重构,没有增加新功能
  • test : 增加测试,包括单元测试、集成测试等
  • build : 改变了build工具 例如glup,webpack,rollup的配置等
  • revert : 撤销上一次的 commit
  • chore : 构建过程或辅助工具的变动,比如增加依赖库、工具等【日常事务】
  • merge:代码合并
  • sync:同步主线或分支的Bug

常用命令

git config

git config --global user.name "Mona Lisa"  # 设置 Git 用户名
git config --global user.email "Mona Lisa"  # 设置 Git 邮箱

git config --global user.name  # 获取 Git 用户名
git config --global user.email  # 获取 Git 用户名

git clone

git clone -b dev Git地址   # 拉取指定分支的代码

git remote

git remote  // 查看已经配置的远程仓库服务器
git remote add origin Git地址   // 把本地仓库关联到gitHub上的仓库
git remote rename origin upstream   // 远程仓库重命名, 远程仓库服务器的默认名称为 origin
git remote -v   // 显示需要读写远程仓库使用的Git保存的简写与其对应的URL 
git remote remove origin  // 解除远程关联

git log

git log    # 显示从最近到最远的提交版本信息
git reflog  # 显示从最近到最远的提交版本信息(包括被删除的commit记录)
git log --graph  # 可以看到分支合并图
git log --author='BurCha'  # 显示某一个作者所有的提交(通过git log查看作者名)

git diff

git diff   # 比较工作区和暂存区之间的区别 使用 q 退出
git diff HEAD   # 比较工作区和最新本地仓库之间的区别
git diff HEAD^   # 比较工作区和最新远程仓库之间的区别
git diff --cached   # 比较暂存区和最新本地仓库之间的区别
git diff branch2  # 查看当前分支和branch2分支的差别
git diff -- views/monitorScreen/monitor/index.vue  # 后面加路径表示查看指定文件的区别

git reset

# --soft  --hard 都不会撤销github平台提交
# 回退到上一个提交版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --soft HEAD^  # 会保留工作区的内容,撤销最近commit/push回退到暂存区
git reset --hard HEAD^  # 清空工作区和暂存区的改动,撤销最近commit/push
git reset --hard 1094a  # 回退到指定提交版本(1094a...是commit id,版本号没必要写全,前几位就可以了)

git restore

git restore --staged .  # 把暂存区全部文件的修改撤销掉(unstage),重新放回工作区
git restore --staged readme.txt  # 把暂存区指定文件的修改撤销掉(unstage),重新放回工作区
git restore .  # 丢弃工作区的全部修改
git restore readme.txt	# 丢弃工作区指定文件的修改,这里有两种情况:一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到到暂存区后的状态。总之,就是让这个文件回到最近一次git commit或git add时的状态。注意:从来没有被Untracked(新建文件没有git add)就被修改或删除的文件,是无法撤销或恢复的!

git branch

git branch dev   # 创建分支
git branch   # 查看本地分支
git branch -r  # 查看远程分支
git branch -m oldName newName  # 修改本地分支名称
git branch -d Ddev   # 删除分支
git branch --set-upstream-to=origin/remote_branch your_branch  # 手动建立追踪关系,origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。
git branch -vv  # 查看本地分支追踪的远程分支

git checkout

git checkout dev   # 切换分支
git checkout -b dev  # 切换并创建分支
git checkout -b dev origin/dev  # 切换并创建分支并关联远程分支

git add commit status

git add .   # 把工作区中所有最新修改的文件都提交到暂存区
git commit -m "描述信息"   # 提交到本地仓库
git status  # 查看当前文件的状态(红色代表在工作区,绿色代表在暂存区,看不见东西(nothing to commit)证明所有修改的信息都已经提交到本地仓库)

git stash

git stash   # 能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。
git stash save "save message"   # 可以添加备注
git stash list   # 查看当前stash中有哪些存储
git stash pop   # 将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
git stash apply   # 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},比如第二个:stash@{1} 
git stash drop stash@{$num}   # 丢弃存储,从列表中删除这个存储

git fetch merge

# 取回指定分支的更新,从远程的origin仓库的dev分支下载代码到本地的origin/dev 【仅仅是改变FETCH_HEAD指向,并不会创建实体分支】
git fetch <远程主机名> <远程分支名>  
git fetch origin dev
# 所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的dev分支,就要用origin/dev读取。
git merge origin/dev 

# 从远程的origin仓库的master-2020.06.23分支下载到本地并新建一个分支master-2020.06.23(不会自动切换分支)【会创建实体分支】
git fetch <远程主机名> <远程分支名>:<本地分支名>
git fetch origin master-2020.06.23:master-2020.06.23  
git merge master-2020.06.23

git merge

git merge dev   # 用于合并指定分支(dev)到当前分

git pull

git pull --rebase upstream master  # 默认merge到当前分支,从远程仓库中获去某个分支的更新,在于本地指定的分支进行merge。此命令本来是:git pull --rebase 【远程主机名】 【远程分支名】:【本地分支名】的省略写法

git push

# 此命令本来是:git push 【远程主机名】 【本地分支名】:【远程分支名】的省略写法
# 【前提:本地必须要有libc分支,否则推送失败,远程自动创建分支失败】
# 无论本地分支有没有关联远程分支,远程都会自动创建一个libc分支,如使用git push -u,则会建立追踪关系
git push upstream libc   
git push -u upstream libc  # 建立与远程libc分支的追踪关系,以后就可以git push / git pull 不指定参数 直接推送或者拉取
Git