美文网首页
Git基本指令和常用操作

Git基本指令和常用操作

作者: 日楚东山 | 来源:发表于2022-03-05 11:18 被阅读0次

概述

自从工作以来,一直在使用Git来做项目的版本管理,随着使用时间越来越长,理解也越来越深刻,所以想根据自己的工作经验写一篇Git相关的文章,介绍Git的指令、常用且快捷的操作和相关的一些概念知识。网上也有很多Git的详细教程,这篇文章准备不深入讲解指令原理,只注重实践和应用,以便提高工作效率。

Git基本指令

从0开始使用Git,准备工作就是安装Git,创建远程仓库,生成SSH公私钥,配置到远程仓库上(或者配置用户名密码)

  • 初始化本地仓库
git init
  • 添加远程仓库
git remote add origin git@github.com:AE86jag/Article.git
  • 当前分支(master)关联远程master分支
git branch --set-upstream-to origin/master
  • 添加所有修改文件到暂存区
git add .
  • 提交到版本库
git commit -m "init project"
  • 拉取远程最新代码
git pull -r
#如果有冲突,解决冲突
git add .
git rebase --continue
  • 推送到远程仓库
git push
  • 保存/恢复当前修改
git stash
git stash pop
  • 分支合并
#把V2.1.0分支代码合并到当前分支
git merge V2.1.0
#如果有冲突解决完冲突
git add .
git merge --continue
git push

Git常规操作

在控制台每输入一个指令,无论正常还是错误,git都会提示下一步或者正确的指令是什么,基本上根据提示都可以顺利操作下去。下面介绍一些常用的操作:

  • 未添加到暂存区的代码(没有执行<kbd>git add</kbd>),移到另一个分支
#假设当前分支是master,在当前分支进行保存现场
git stash
#切换到要修改的分支 V2.1.0
git checkout V2.1.0
#恢复现场
git stash pop
#如果切换回master执行git stash pop,也是会出现之前修改的代码的

适用场景:

本来应该在其他分支修改的内容,没有切换分支,直接在master上修改了,但是没有添加到暂存区,这部分修改又是不上线的,不能提交的;

  • 已经commit的代码移到另一个分支
#这个提交在原分支还是存在的
git cherry-pick 587f23ff2e20ab4c97c12aa24f5d67a5257c2c5d

适用场景:

在某些分支策略下,在分支A修复的BUG,需要同步在master分支上修复,分支A的有一部分代码是不上线的,不能用<kbd>git merge</kbd> ,这时候就可以使用该指令将部分commit复制到其他分支

  • 撤销未push的commit
#撤销上一个commit,也就是最新的commit,执行完修改是在工作区,未add的状态
git reset HEAD^
#同上,但是修改的部分也被撤销了
git reset --hard HEAD^

适用场景:

有些仓库的commit的message是有一定规则的,不符合规则不让提交,如果提交的message写错了,那么可以撤销修改,但是保留代码,重新执行<kbd>git add</kbd> <kbd>git commit</kbd> 重新提交

  • 撤销已push的commit
git revert commitId
git push

已经push的不能用 git reset HEAD^,因为这样本地已经撤销,等push的时候,会提示落后远程一个提交,只能git pull 一下,这样之前撤销的commit又回来了,可以加-f强制提交,但是有些远程仓库是禁止强制提交的

  • 撤销未add的修改
git checkout <file>
git restore <file>

适用场景:

书写了逻辑错误的代码,需要重头开始写,直接<kbd>git checkout .</kbd>清除所有未add的无用代码

  • 撤销已add但未commit的修改
#以下三个指令都可以
git reset --mixed
git restore --staged <file>
git reset HEAD <file>
  • 基于某个Tag修改代码
git branch <分支名> <标签名称>

适用场景:

提交上线投产申请时,是打一个Tag,后续使用这个Tag进行上线,部署,打完Tag后可以继续在该分支提交代码。假如某次上线后发现一个严重Bug,需要紧急修复,为了不引入新的代码产生风险,那么需要在上次上线的Tag基础上拉一个分支进行Bug修复,测试覆盖完后重新打一个Tag进行紧急上线。

Git其他操作

  • 分支策略

只要不混乱,适合团队就可以。比如我所在的团队就是主分支提交,主分支发布。多项目并行,上线时间不确定,则拉分支开发,根据实际情况进行分支合并。

  • Pull Request

除了修改开源项目时,自己项目开发时,也可以采用PR的方式,每个人提交的代码都由技术经理进行审核,审核通过以后合并到项目中,这样可以代替代码检视,比较适合逻辑相对不复杂的项目。我所在的项目,前端就是采用PR的方式。后端因为逻辑比较复杂,还是直接提交,定期代码检视。

  • Git的自动化

Git自动化可以使用Shell脚本,如果想在Java代码中使用Git,有一个类库叫JGit,可以引入依赖在Java代码中使用,其中的API和Git指令都是一一对应的。应用场景有很多,比如使用Jenkins自动化部署的时候,编写一个Shell脚本,使用Git指令从远程仓库拉取代码后进行构建部署,不用手动打包,上传、部署。JGit也有很多地方用到,比如自定义Gradle插件,修改了文件,使用JGit提交到当前项目中,

  • Git的钩子

Git的钩子可以分本地的钩子和远程的钩子。

本地的钩子被存在Git目录下的hooks子目录中,有很多类型,比如提交之前,提交之后等等,可以在提交之前做一些限制,比如限制代码风格、限制commit的message格式,等等,只要你想在做的校验,自己编写脚本放在hooks目录下即可。

远程的钩子,在代码托管网站上可以设置,也有很多类型,比如Push、打Tag、Pull Request等,需要选择类型,然后输入一个URL,等事件触发以后,Git会向这个URL发送一个POST请求。比如可以设置一个Push钩子,URL写一个Jenkins的任务构建的API(http://用户名:密码@IP:端口/job/项目名/build)。这样,每次提交代码的时候就会触发构建,构建任务有自动化脚本,进行部署。

  • Git子模块

Git可以将一个仓库作为另一个仓库的子目录,可以多个仓库共享某个公共的仓库,但是又保持独立的提交。比如微服务架构下,每个服务都有接口测试的Json文件,跨服务调用时,也是使用Json文件进行Mock服务间请求,这样,每个服务都依赖这些Json文件,所以把这些Json文件作为一个仓库,并作为其他微服务的子模块,就实现了复用,而且独立提交。

执行指令 <kbd>git submodule add 仓库地址</kbd> 当前项目就会多一个.gitmodules文件,和子模块的目录

相关文章

  • 组件化(第一篇)

    组件化 git 常用操作指令 cocoapods的基本使用 cocoapods本地私有库 一、git 常用操作指令...

  • Git基本指令和常用操作

    概述 自从工作以来,一直在使用Git来做项目的版本管理,随着使用时间越来越长,理解也越来越深刻,所以想根据自己的工...

  • git远程仓库关联

    一.GitHub常用指令 git的基本使用指令:git init ...

  • Linux和git指令

    git常用指令 1.基本指令 git init —— 新建git仓库git add 文件/文件夹 —— 将...

  • 使用git管理本地和远程分支常用指令

    1 基本操作指令 git branch -a ...

  • git使用详解

    目录: 1、git的优势2、需理解的概念3、操作指令 本篇文章只将git是什么,git的优势,以及常用的操作指令,...

  • Git使用总结

    git 常用指令 新建项目 常用代码提交操作指令 查看分支 删除分支 重命名远程分支 修改远程仓库地址 撤销分支 ...

  • Git常用操作指令

    全局配置 初使化代码仓库 查看信息 版本回撤 分支操作 远程操作 查看所有提交信息

  • GIt 常用操作指令

    《Git 使用规范流程》 《常用 Git 命令清单》 《Git 远程操作详解》 《Git工作流程》 开发过程中,用...

  • Git 常用操作指令

    安装及配置:配置用户名:git config --global user.name"你的名字"配置e-mail:g...

网友评论

      本文标题:Git基本指令和常用操作

      本文链接:https://www.haomeiwen.com/subject/gcovrrtx.html