git使用

319 阅读6分钟

常用命令

提交代码

git pull 拉取代码后直接合并,即:git pull = git fetch + git merge
git push 推送代码

完整写法:
git push orgin 本地分支名:远程分支名
其中本地分支名不写即删除远程分支

git add . 添加到本地staged
git commit -m “提交的message” 提交(commit)到本地仓库;--amend使用一个新的提交来替代当前提交的tips(也就是可以修改commit信息啦)
git fetch -p 将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。-p 修剪 删除远程已删除的分支

检查仓库

git --version 查看git版本
git status 本地仓库状态
git config --list 查看git配置信息
git config --global user.name lily 配置git全局配置信息 用户名
git config --global user.email huang@qq.com 配置git全局配置信息 邮箱
git config --global credential.helper store --file ~/.my-credentials 配置git凭证助手
在使用https连接的时候不用输密码

查看某个提交的具体内容

git log 查看提交历史记录;--oneline显示commitid和信息在一行;--graph以图形显示
git log 文件名 查看已删除的文件的提交记录
git show commit_id 查看某个提交记录的详细
git show --raw commit_id 显示原始的

分支操作

git branch -D dev 强制删除dev分支
git push origin :dev (先删除dev分支)删除远程dev
git branch 显示分支

  • -r 显示远程分支
  • -v 显示详情

git branch 分支名 创建一个本地分支
git branch -m 旧名字 新名字 重命名分支
git checkout 分支 切换到分支
git checkout -b 分支 创建并切换分支
git checkout -b dev(本地分支名) origin/dev(远程分支名) 检出远程分支,并与建立关联
git checkout -- <file>... 丢弃工作区的改变(已追踪的文件)

将代码从一个分支转移到另一个分支

git merge 所有的
git cherry-pick <commitHash> <commitHash>某几个提交 ,会在当前分支产生一个新的提交;commitHash 可以用git log看

  • -x在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。

git cherry-pick --continue 如果cherry-pick发生冲突,并已解决好,使用此命令来继续 cherry-pick
git cherry-pick --abort 取消本次cherry-pick

git rebase 变基,当前分支与目标分支变动的提交取消掉,保存在 .git/rebase 目录中,将目标分支的代码更新到当前分支,然后把当前分支保存下来的应用到最新分支上;此过程会产生冲突,与 merge 不同的是,他是一个一个的处理,处理完 使用 git rebase --continue,如果不想 rebase,可以使用 git rebase --abort 取消本次rebase

git 重置

概念解释:
Head 头,可以理解为最近的一次commit记录
index 索引,可以理解为git add 之后的区域
working tree 工作树,就是修改没有git add的区域文件

git reset --hard HEAD^ 硬重置;一共有3个区,工作区(working tree),暂存区(index),历史区(Head);当修改一个文件,这个文件变化在工作区;使用git add 这个文件将进去到暂存区,git commit 会提交到历史区;这3个区会重置

  • --hard 相当于重置到目标,工作区暂存区清空

git reset --mixed HEAD^ 默认 --mixed 相当于重置到 工作区保留,暂存区清空
git reset --soft HEAD^ --soft 工作区 暂存区保留
可用来合并commit节点,让演进图更清晰
git checkout -- <file>... 重置一个文件;丢弃工作区的改变(已追踪的文件) git checkout commitid <file> 重置文件为某个提交的状态

  1. 本地commit重置到index区
    使用 git reset --soft HEAD
  2. index区重置到工作区
    使用 git reset HEAD
  3. 丢弃工作区改变
    使用 git checkout file

git 暂存

暂存可以保存不需要提交的文件,便于切换分支。回头还可以再应用回来。

git stash save [message] 暂存已追踪的文件,保存为message名称
git stash list 列出所有暂存
git stash apply stash@{0} 应用第一个暂存,不会删除暂存
git stash pop 应用第一个暂存,删除第一个暂存

tips:对于新增的文件需要暂存,要先 git add 才行

比对

git diff 比较工作区和暂存区之间的文件差异
git diff HEAD 比较工作区和版本库之间的文件差异 可附加具体文件名

常用操作

获取仓库

创建git仓库并关联远程

  1. 创建仓库目录

    mkdir microservice  
    
  2. 进入目录

    cd microservice  
    
  3. 初始化git

    git init  
    
  4. 关联远程仓库

    git remote add origin git@gitee.com:street1corner/microservice.git  
    
  5. 推送远程分支 指定一个默认主机

    # 建立追踪关系
    git push -u origin master  
    # 推送本地分支到远程分支(远程没有)
    git push --set-upstream origin feature-test
    

    -u 建立或者更新当前分支和远程分支的追踪关系

克隆已存在的仓库

git clone https://github.com/libgit2/libgit2

使用idea、eclipse(sts)记住密码

git通常有2种连接方式ssh和https
ssh 前提当然你得有权限将自己主机的id_rsa.pub 加入到git账户的SSH Keys中
https 需要使用credential 来记住
安装git客户端 运行git config --global credential.helper store --file ~/.my-credentials 下一次pull或者push将把密码保存在.my-credentials文件中

个人觉得还是ssh最为方便

重置操作

对于已经跟踪的文件已经修改了可使用git checkout 文件名来重置

对于已经跟踪的文件已经修改并暂存了可使用git reset Head 文件名来移出暂存区,接着使用git checkout 文件名来重置

git多人协作

分支:
master 和 dev 日常保持
feature-*
release-1.0
fixbug-1.0

  • master 主分支,用来发布
  • dev 开发分支,用来开发(通常多个人同时在此分支)
  • feature-* 功能性分支,从dev检出,用来开发某个功能,开发完合到dev,用完即删
  • release-1.0 预发布分支,从dev检出,做测试,测试完合到master,master打个tag,再合到dev,用完即删
  • fixbug-1.0 修补bug分支,从master检出,改bug,改完合到master、dev,master打个tag,用完即删

相关命令

# 创建一个功能分支
git checkout -b feature-x dev

# 合并到dev分支
git checkout dev
git merge feature-x

# 删除分支
git branch -d feature-x

# 打标签
git tag -a 1.2

git commit 规范

书写格式,例如:

feat: 新增加密日志

- 报文加解密


其中 feat 可替换成下面些
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:中文含义:家务活,日常事务,例行工作;构建过程或辅助工具的变动

参考文献

  1. Git分支管理策略