Git常用整理

说明:本文不涉及很多命令的历史来源 或者 详细教程,只是为作者在实际工作中总结了几块比较实用的流
     程 or 技巧。不过弄明白本文列出的几块,基本上满足日常工作是没问题的啦。

Git各阶段关系总览

Git各阶段关系总览  图片来源于网络

拉取流程

  • 绑定提交账户 【填写用户名和邮箱时 需要输入密码】

    • 对应一次提交 【临时性设备建议设置】

      git config user.name BinCain
      git config user.email BinCain@net.com
      
    • 全局修改 【长期用的设备建议设置】

      git config --global user.name BinCain
      git config --global user.email BinCain@net.com
      
      
    • 差异配置 IncludeIf 【可配置多个环境 有多个账号或者需要同步到不同远程的可以自行查询】

  • 从远程仓库第一次下拉项目

    git clone 仓库地址
    
    # 如果是指定某个分支
    git clone -b 分支名  仓库地址
    
  • PULL作用

    #从远程获取代码并合并到本地的版本
    git pull  =  git fetch + git merge FETCH_HEAD
    
  • 同步远程代码

    # 标准格式
    git pull <远程主机名> <远程分支名>:<本地分支名>
    
    # 示例     ## 将远程master分支拉下来并和本地的test_local分支合并
    git pull origin master:test_local   
    
    # 如果是远程分支和当前分支合并 【可省略 :<本地分支名>】
    git pull origin 远程分支名
    
    # 如果本地当前分支和远程分支已绑定 可简写如下
    git pull
    

提交流程

  • 提交修改文件到暂存区 【工作区-> 暂存区】

    git add <文件>
    # 添加所有修改
    git add .
    
  • 提交修改文件到本地仓库 【暂存区-> 本地仓库】

    git commit -m '类型:注释内容'
    
  • 提交修改文件到本地仓库 【工作区->本地仓库】

    # 此命令 = add + commit m
    git commit -am '类型:注释内容'
    
  • 提交修改文件到远程仓库 【本地仓库-> 远程仓库】

    # 第一次提交时 可以设定关联关系 
    git push -u origin master
    
    # 如果是提交到指定的远程
    git push origin xxxx
    
    # 绑定当前本地分支和某个远程分支
    git push --set-upstream origin xxx
    
    # 本地版本已经绑定远程版本时可用
    git push
    # 如果是强制覆盖远程 添加上  -f
    
    
  • 提交注释规范

    # 提交模板暂没有特别统一可以强制的规范
    # 以下为本人的提交模板:
      <type>(<scope>): <subject>
      <describe>
    
    # type (必须) 【可选范围如下】
    	# feat:新功能(feature)
    	# fix:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG
    	# style:格式(不影响代码运行的变动)
    	# refactor:重构(即不是新增功能,也不是修改bug的代码变动)
    	# delete:删除(删除无用代码 删除无用文件等)
    	# docs:文档(documentation)
    	# test:增加测试
    	# revert:回滚到上一个版本
    	# merge:代码合并
    # scope (可选) 【简单描述 如 DAO、Service、Controller 等】【此选项在本司不作要求】
    # subject (必须) 【简洁描述此次提交做了什么】
    # describe (可选) 【详细描述 觉得subject不能够准确表达的 可详细说明】【最好将需求号加上】
    
    # 提交示例 【较全】
    feat(Controller): 新增xxx接口添加限流注解
     xxxxx原因,xxxxxxx详细说明
    # 提交示例 【简洁】
    feat: 新增xxx接口添加限流注解
    

分支操作

  • 查看分支

    • 查看本地分支

      git branch 
      
    • 查看远程分支

      git branch -r
      
    • 查看所有分支

      git branch -a
      
  • 创建分支

    • 创建本地分支

      # 依然停留在当前分支
      git branch <分支名>
      
      # 创建并跳转到新的分支上
      git checkout -b <分支名>
      # or
      git switch -c <分支名>
      
    • 创建远程分支

      git remote add origin <git地址>
      
      # 1.创建空的远程分支
      git checkout -b 分支名;  
      git push --set-upstream origin 分支名;  
      
      # 2.以已有的分支为源创建远程分支
      git checkout -b 分支名 origin/已存在的远程分支名
      git push --set-upstream origin 分支名; 
      
      
  • 删除分支

    • 删除本地分支

      git branch -d <分支名>
      # 如果删除不掉 使用-D强制删除
      git branch -D <分支名>
      
    • 删除远程分支

      # 第一种删除方式
      git push origin --delete <分支名>
      
      # 第二种删除方式
      git branch -r -d origin/分支名
      git push origin :分支名
      
  • 切换分支

    git checkout <分支名>
    # or
    git switch <分支名>
    
  • 分支修改后切换去其他分支,不想将修改的东西带过去 【只有被跟踪的有效】 git stash详细的用法可参考

    ## 1.保存修改到工作区
    git stash
    git stash save '注释'
    
    ## 2.切换到其他分支  【切换后也可以再切回来】
    
    ## 查询有哪些暂存
    git stash list
    
    ## 应用
    git stash apply stash@{$num} 
    
    
    ## 恢复之前缓存的工作目录  将缓存的stash删除
    git stash pop
    
  • 合并其他分支的修改

    • git merge

      # 在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”
      git merge <分支名>
      
    • git rebase

      # 第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
      # Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
      
      git rebase <分支名>
      
    • git cherry-pick 【http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html】

      # 功能接近rebase cherry-pick是可以选择具体的某次提交
      git cherry-pick commitHash
      
      # 1. 可以获取多次提交内容
      git cherry-pick a b c
      # 2. a到c之间的所有提交【不包括a】
      git cherry-pick a..c
      # 3. a到c之间的所有提交【包括a】
      git cherry-pick a^..c
      
      # 如果有冲突 修改冲突后执行
       git cherry-pick --continue
      
      
    • 合并提交【squash/rebase 合并】 合并提交参考文档

      • squash

        # 比如生产出现bug 新建分支bug_master_20210501  并产生了多次提交
        
        # 1. 在master分支可执行如下操作
        git merge --squash bug_master_20210501  #注意:squash前面是两个短杠
        git commit -m '修复了xxx'
        git push origin master
        
        #2.  删除bug 分支
        
      • rebase

        • IDEA 界面操作 https://zhuanlan.zhihu.com/p/356583972
        • 命令行操作 https://www.cnblogs.com/wangiqngpei557/p/5989292.html
        git checkout dev
        git rebase -i master
        git checkout master
        git merge dev
        

        image-20210526174024316

  • 分离HEAD

    git checkout CommitHash
    # 为该分离头结点状态下commit创建分支
    # 如果不想要保留修改:不创建git分支将会在一段时间丢弃该commit
    # 如果想要保留修改 :  git branch new_branch_name CommitHash基础上修改后的CommitHash
    
    
    # 指定特定的分支到指定的提交版本
    git branch -f <分支名> <commitHash>
    

合并时版本变化动图

  • 没有冲突的 【目标分支有修改】

    img

  • 没有冲突的 【当前分支有修改】

    img

  • 产生冲突的

    img

以上几张图片来源: https://baijiahao.baidu.com/s?id=1664197276209808372&wfr=spider&for=pc

Git各阶段代码撤销

  • 工作区【文件修改单未add】

    git restore <文件>
    
    # 用 【 git checkout <文件> 】   也可以实现工作区撤销,git操作提示用的是restore
    
  • 暂存区 【add 单未commit】

    git restore --staged <文件>
    
    # 会将修改撤销到工作区 如
    
  • 本地仓库【commit 单未push】

    # 直接回退到某个版本  修改的东西会丢失
    git reset --hard commitId
    
    # 回退到某个版本  修改的东西和在缓存区中 
    git reset --soft commitId
    
    # 回退到某个版本  修改的东西会在工作区中
    git reset --mixed commitId
    
  • 远程仓库【已经push的】

    ## 1. 单独开发时可用 
    git reset --hard commitId
    git push -f 
    
    ## 2. 多人开发时就要考虑别人的版本号问题,需要既达到回退修改,又要提升版本号
    # 撤销最近一次提交
    git revert HEAD                     
    # 撤销上上次的提交,注意:数字从0开始
    git revert HEAD~1  
    # 回退指定的某次提交 【不是最近一次的话 一般会有冲突,去掉当前的代码 保留之前的即可】
    git revert commitId                  
    

参考文章: https://www.cnblogs.com/linzewei27/p/14380911.html

使用常见问题

  • .gitignore后添加忽略文件 【可能有些文件已经提交了】

    # 先删除缓存
    git rm -rf --cached .
    # 再重新添加
    git add .
    # 提交到仓库
    git commit -m 'fix:提交日志' / git push
    
  • 提交时报错没有绑定对应远程

    No tracked branch configured for branch master. To make your branch track a remote branch call, for example, git branch --set-upstream-to origin/master master
    
    # 解决方案
    git branch --set-upstream master origin/master
    
  • 绑定提交账户 【填写用户名和邮箱时 需要输入密码】

    • 对应一次提交 【临时性设备建议设置】

      git config user.name BinCain
      git config user.email BinCain@net.com
      
    • 全局修改 【长期用的设备建议设置】

      git config --global user.name BinCain
      git config --global user.email BinCain@net.com
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值