git简介和办公常用使用场景操作命令

git作为开发中常用代码版本控制工具,本文主要列举实际开发工作中使用git进行项目管理的常见场景,开始之前,默认已经配置好了本地git和已经创建了github账号,有gitlab或者gerrit也是可以的,底层都是走的git协议,操作起来大同小异。演示Idea版本为IntelliJ IDEA 2022.1 (Community Edition),不同idea版本在git使用上差异很小。

git、gitlab和github的异同?

git是版本控制系统,gitlab和gitlhub都是基于git实现的在线代码仓库软件。gitlab和github最大的不同时,gitlab的可以自己搭建在自己的服务器上,gitlab是个人版的github。github上的私人仓库是要收钱的,gitlab可以搭建免费的私人仓库。

gitlab和github上都对不同的语言项目都制定了不需要进行版本管理的文件,像Java项目中的“.class”文件就不需要被管理,因为这个文件可以通过编译得到。

git常用的传输协议,本地协议哑协议和智能协议,远程的http/https 和ssh;哑协议传输速度不可见,智能协议传输速度快,智能协议比哑协议传输速度快。

gitlab用户组五种权限:

Guest:可以创建issue、发表评论,不能读写版本库

Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限

Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限

Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限

Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限

Gitlab中的组和项目有三种访问权限:

Private:只有授权的用户才可以看到 分配的用户

Internal:只要是登录 gitlab 的用户就可以看到

Public:只要可以访问 gitlab web 页面的人就可以看到

场景1:将新创建项目提交到github托管

respository可以理解为和project同一个东西,新创建空的project中没有respository,当在工程创建第一个文件的时间respository才存在。
(1)首先在本地新创建一个项目git-test,默认不加入idea托管。
在这里插入图片描述在这里插入图片描述

(2)初始化git

git init # 初始化git项目,默认项目名字是master

在这里插入图片描述

(3)根据自己需要,可以在.idea/.gitignore中添加target,这样就不用应用编译文件加入到代码控制中。

在这里插入图片描述

(4)将工程中所有文件使用git进行版本控制

git add . # 将工程中所有文件暂时放入到缓存区中
git commit -m '项目加入到版本控制' # 提交文件到本地仓库

(5)在github上创建一个新的项目(github从01/10/2021,仓库默认名字由master改为main)

(6)将本地分支和远程分支进行关联,并将本地项目推到远程分支

git branch -m main # 将本地master 分支名字修改为main,和要关联的本地分支一致
git remote add origin https://github.com/ChangBinHu/git-test.git # 和远程分支建立关联
git pull --rebase origin main # 远程仓库有README.md,拉取一下
git push -u origin main # 本地分支推到远程分支

在这里插入图片描述
在这里插入图片描述

note:在git push的时候,需要输入Username和Password,Username是https://github.com/XXXX/git-test.git//路径中的XXXX部分,Password是github中个人token,从2021年8月13日,github将通过个人密码登陆修改为通过个人token登陆,个人token生成方式

1.git --version    #查看版本
2.git config --global init.defaultBranch main   #git在2.28.0上,重新设置git默认分支为main

新项目使用git管理过程总结:

(1)git --version    #查看版本
(2)git config --global init.defaultBranch main   #git在2.28.0上,重新设置git默认分支
(3)创建本地工程项目,git init # git初始化
(4)git add . #工程所有文件加入版本控制
(5)git commit -m 'xxxxx提交信息' # 将工程中文件提交到本地git仓库
(6)github个人主页中创建远程仓库
(7)git branch -m main  #如果没有执行(1)(2)步,需要将本地master分支名字修改为main
(8)git remote add origin https://github.com/ChangBinHu/git-test.git(修改为自己的远程仓库地址)# 上一步创建的远程仓库建立连接
(9)git pull --rebase origin main #将远程仓库创建时,默认创建的README.md拉取到本地
(10)git push -u origin main #将本地分支推到远程仓库main中

操作结束之后,git log为:
在这里插入图片描述
add ,commit和push作用,前两步修改的文件都还在本地,最后的push才会将文件上传到远程服务器。
在这里插入图片描述

场景2:修改最近的一次commit的message

当完成一次代码的编写,写完了commit进行了提交,提交之后,经过别人Code Review之后,给出了建议,进行了修改,因为没有大的修改,所以希望继续使用上次commit的内容,不再提交新的commit,换句话说,就是向上次commit中追加内容。当然一次请求中可以包含多次commit,但是只能对最后一次commit进行修改。

例如:新增两个数相除接口,编写完成之后进行提交,Code Reviewer给出建议没有对除数为零进行判断,重修修改自己的代码进行修改,修改上次commit,再次提交。

(1)git pull# 从远程仓库中获取当前分支的最新代码
(2)编写两个数相除的代码
(3)git add . # 添加当前目录下所有内容到暂存区
(4)git commit -m 'ADD:两个数相除'#提交代码到本地仓库
(5)git push # 提交代码到远程仓库
(6)Code Reviwer完成,提出修改意见,根据修改意见进行修改
(7)git add . #将修改内容添加到暂存区
(8)git commit --amend #修改最近一次commit,这个过程中会让进入到commit内容编辑界面,如果不需要修改直接退出(:q)就行
(9) git push # 将本地库内容同步到远程库

每次Commit提交的原则,修改代码应该大小适中,内容可以清晰表达本次修改内容,一次提交内容太多,给Code Reviewer造成困难,粒度太小,会造成Commit的滥用。

场景3:修改任意一次commit的message

获取对应要修改提交id,然后修改对应message

git rebase -i commitId^

将修改message修改,同时将前面的【pick】修改为【reward或者r】
在这里插入图片描述
如果commit已经推到了远端,要将修改commit消息同步更新到远端

git push --force

场景4:保存当前分支的现场

如果在开发当前分支过程中,但是还没有形成一个有意义的提交,需要切换到其他分支,为了避免当前修改丢失,可以将现场进行保存

git stash #开发中加入了紧急任务,可以将当前的工作流进行保存,然后处理紧急任务,
git stash pop /git stash apply#都是恢复stash刚才保存的工作流,pop会将stash中的工作流删除,而apply不会删除。

场景5:提交代码解决冲突

在提交代码时,会提示本地分支落后于远程分支,也就是我们常说的代码冲突,发生冲突的原因是本地编辑过程中,有其他开发者修改了远程分支并进行了提交。如果在本地在原来分支上修改了内容,这种情况在push时并不会产生冲突,进行异常冲突的覆盖,git将这种操作认为是对分支的正常修改,本地修改内容会直接覆盖远程分支内容。

解决方式1:提交之前先拉取远程分支,将远程分支和本地分支进行合并。

(1)使用idea 的update Project功能,会从远程分支拉去最新代码,并进行比较,现实冲突内容,按照提示解决冲突进行。
(2)git add .
(3)git commit -'XXXX'
(4)git push

场景6:切换一个新的分支&分支合并

工作中,修复一个bug或者进行新的功能迭代开发,一般需要创建一个新的分支,bug修复完成或者新迭代开发完成之后,再将分支和主分支进行合并。

(1)git checkout -b   'xxx'# xxx是新分支的名字,创建xxx分枝并同时切换到该分支
(2)git push -u origin 'XXX' [git push --set-upstream origin 'XXXX']# 创建并关联远程分支,XXX是要关联远程分支的名字,一般和上一步新创将本地分支名字一致
(3)在当前分支上进行修改
(4)提交本地修改到远程分支(git add . | git commit -m 'xxx'| git push)
(5)git checkout main #切换到主分支
(6)git pull #获取主分支最新代码
(7)git merge 'xxx' # 合并xxx到当前主分支 
(8)git push #将合并好的当前主分支推到远程仓库

note:如果合并过程中有冲突,使用intellij 的图形化界面进行合并,此处冲突和提交代码中的冲突定义一致。

存在问题

(1)目前gitHub访问不稳定,在拉取和提交gitHub代码的时候,出现gitHub无法访问(LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443),多重试几次可以解决。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值