Git常用命令

90 阅读6分钟

一、ssh key 生成

#打开bash
#ssh key 生成
ssh-keygen -t rsa -C "xxx@xxx.com" -b 4096 -f name_rsa # -t指定ssh秘钥类型 -b指定秘钥长度(RSA秘钥最小要求768,默认2048) -f 指定rsa文件的名称

二、创建多个SSH key

# 在 ~/.ssh 目录下
# 创建个人ssh key
ssh-keygen -t rsa -C "your_email@email.com" -f github_rsa
# 一路回车,不需要密码

# 创建公司ssh key
ssh-keygen -t rsa -C "company@email.com" -f company_rsa

# 创建config文件
touch config 
# 添加以下内容

 # github.com
 Host github.com
 HostName github.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/github_rsa

 # gitlab.company.com
 Host gitlab.company.com # 需要替换成公司的git域名
 HostName gitlab.company.com # 需要替换成公司的git域名
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/company_rsa
 
# 将 .ssh 文件夹下的 github_rsa.pub 中的内容复制到github的ssh key 配置中
# 将 .ssh 文件夹下的 company_rsa.pub 中的内容复制到公司gitlab的ssh key 配置中

# 测试配置成功没
ssh -T git@github.com

# 返回以下内容则为成功
# Hi YK-Unit! You've successfully authenticated, but GitHub does not provide shell access.

# 公司同理 但是可能没反应,属于正常,可以正常put和push等操作
ssh -T git@公司gitlab域名.com

三、上传本地新项目到github仓库

# 先创建好项目 比如名称为demo,进入demo文件夹根目录
cd demo

# 初始化仓库,将这个文件夹变成git可管理的仓库
git init

# 将所有文件添加到暂存区内,.的意思是所有文件
git add .

# 提交项目到本地仓库
git commit -m "first commit" # -m 后面跟注释

# 关联远程仓库
git remote add origin git@github.com:githubusername/demo.git

# 如果远程仓库不为空必须做这一步合并操作,否则后面会提交失败
git pull --rebase origin master

# 把本地仓库的内容推送远程仓库
git push -u origin master

# 查询查询命令
git status

四、上传本地分支到git仓库

# 首先需要本地有一个master分支,没有则从服务端拉取
cd 需要放置项目的目录
git clone 项目的仓库地址

# 在master进行修改后在本地创建一个新分支
git branch 分支名称 # 此方式创建后不会自动切换为新分支
git checkout -b 分支名称 # 此方式创建后可自动切换到新分支

# 查看本地分支
git branch

# 查看远程分支
git branch -r

# 切换分支
git checkout 分支名称

# 切换完成后进行本地add 和 commit
git add .
git commit -m '提交信息'

# 然后将本地的分支push到仓库
git push origin 本地分支名称:仓库分支名称 # 如果仓库还没有本分支,会自动创建

五、合并分支

# 首先确认当前本地分支和远程的分支一致
git status
> On branch local_branch
> nothing to commit, working tree clean

# 确认后将远程的master分支拉取到本地并命名为temp
git fetch origin master:temp

# 对比本地分支与temp的区别
git diff local_branch temp

# 然后将temp合并到本地分支上
git merge temp

# 解决冲突,一般来说没什么冲突,除非两个人修改同一个地方
# 解决完冲突后,需要将变更提交到远程的分支上remote_branch
git add. 
git commit -m '变更信息'
git push origin local_branch:remote_branch
# 然后测试是否存在问题,无问题将该分支merge到远程的master上即可

六、删除分支

# 删除远程分支
git push origin --delete Chapater6

# 删除本地分支 需在master分支时删除其他分支
git branch -d Chapater8

七、回滚分支

# 回滚本地分支 回滚到提交id为commit-id的分支
git reset --hard commit-id

# 将最近3次的提交回滚
git reset --hard HEAD~3

# 远程仓库分支回滚,删除远程分支,回滚本地分支,重新提交本地分支
git checkout the_branch
git pull
git branch the_branch_backup # 备份当前分支
git reset --hard commit_id # 回滚
git push orgin --delete the_branch # 删除远程分支
git push origin the_branch:the_branch # 重新提交
git branch -d the_branch_backup # 前面的操作都成功了,删除备份分支

八、拉取远程分支

git checkout -b the_branch origin/the_branch

九、git stash 用法

# 在分支上修改了一些东西但是又不想提交,这个时候需要切到其他分支,此时就需用到git stash来储藏当前的改动
# git stash 会把所有未提交的修改(包括暂存和非暂存的)都保存起来,用于后续恢复当前工作目录
git status # 查看当前的提交状态,发现有一些改动文件未提交
git stash save "text-cmd-stash" # 进行储存,并添加一个message用于说明
git stash list # 查看stash列表
> stash@{0}: WIP on master: 049d078 added the index file
> stash@{1}: WIP on master: c264051 Revert "added file_size"
> stash@{2}: WIP on master: 21d80a5 added number to log
git status # 再次查看提交状态,没有需要提交的改动,此时就可以切换分支了

# 再次切回该分支,需要重新应用缓存的stash
git status # 首先查看git提交状态,应该是 nothing to commit, working tree clean
git stash pop # 重新应用缓存的stash,该命令会将缓存堆栈中的第一个stash删除,并将对应修改应用到当前工作目录下
# 或者也可以是apply命令,这个命令同样会重新应用缓存的stash,但是不删除stash
git stash apply stash@{0} # 通过stash的名字决定应用哪个

# 删除stash
git stash drop stash@{0} # 删除栈中最近一个入栈的

十、git提交commit规范

commit message格式

<type>(<scope>): <subject>

type(必须)

用于说明git commit的类别,只允许使用下面的标识。 feat:新功能(feature)。 fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。

  • fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
  • to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix

docs:文档(documentation)。 style:格式(不影响代码运行的变动)。 refactor:重构(即不是新增功能,也不是修改bug的代码变动)。 perf:优化相关,比如提升性能、体验。 test:增加测试。 chore:构建过程或辅助工具的变动。 revert:回滚到上一个版本。 merge:代码合并。 sync:同步主线或分支的Bug。

scope(可选)

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。 例如在Angular,可以是location,browser,compile,compile,rootScope, ngHref,ngClick,ngView等。如果你的修改影响了不止一个scope,你可以使用*代替。

subject(必须)

subject是commit目的的简短描述,不超过50个字符。 建议使用中文(感觉中国人用中文描述问题能更清楚一些)。

  • 结尾不加句号或其他标点符号。
  • 根据以上规范git commit message将是如下的格式:

fix(DAO):用户查询缺少username属性 feat(Controller):用户查询接口开发