有关git中的一些代码管理问题整理

一.有关GIT的一些原理解释

1.GIT信息的存储相关
当在网上clone代码的时候会发现有一个隐藏的.git/文件夹,git会将整个数据库存放在这个目录的下方,而每一次commit都相当于插入了一个hashMap,而分支和tag信息存储相当于插入的是一个个的指针,组合起来就是一个key-value的数据库加上默克尔树形成的有向无环图 (和区块链结构相同)

2.GIT中的三个分区
众所周知Git中有三个分区,分别是工作目录,索引,git仓库
工作目录 ( working directory ):操作系统上的文件,所有代码开发编辑都在这上面完成。
索引( index or staging area ):可以理解为一个暂存区域,这里面的代码会在下一次commit被提交到Git仓库。
Git仓库( git repository ):由Git object记录着每一次提交的快照,以及链式结构记录的提交变更历史。

二.常用的一些git命令整理

git clone 从仓库复制的地址
git log 查看提交日志
git status 查看当前工作目录的工作状态
git commit -m “update message” 提交代码到本地仓
git push 提交代码到远程仓库
git push orgin 分支名称 提交到远程仓并同时建一个远程分支
注意:merge reqest的形式会自动将本地分支同步到远程主分支上
git pull 拉取代码
git branch 分支名称 在当前commit的里程碑(时间点)处创建一个新的分支
git checkout -b 分支名称 切换到xx分支
git branch -d 删除分支
git merge 分支名称 合并分支
git merge --abort 取消merge
git log -p 查看详细的改动历史
git log – start 查看具体改动
git show 查看当前的commit
git diff 查看当前commit后的改动

三.常见的git问题处理方法

1.当没有拉取当前分支的时候就commit代码导致push不上去时

首先撤销此次提交,然后需要将本地代码和远程仓库进行版本同步,之后解决冲突 resolve后提交代码

2.漏提交时

第一种方法可以再次发起一次commit,但是这种方法在push到远程仓的时候会出现两次commit

第二种方法

git add 缺失的文件名
git commit -- amend --no-edit  //--no-edit 表示消息不会更改,在git上仅显示一次提交

3.提交错误文件,撤销此次提交并回退到上一个版本

//方法一
git reset HEAD <文件名>  //将暂存区的此次修改撤销,放回工作区
//方法二
git reset --hard commit_id  //指定回退到某一次git提交版本
//方法三
git reset --hard HEAD~1 //回退到上一个提交版本
//方法四
git reset --soft HEAD~1  //软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。

4.突然发现之前的某次提交有问题想要改动

// 撤销前一次 commit
git revert HEAD
// 撤销前前一次 commit
git revert HEAD^
// (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert commit 版本号

注:git revert命令会作为一次新的版本提交

三.常用开发流程

克隆最新主分支项目代码 git clone 
地址创建本地分支 git branch 
分支名查看本地分支 git branch
查看远程分支 git branch -a
切换分支 git checkout 分支名 (一般修改未提交则无法切换,大小写问题经常会有,可强制切换 git checkout 分支名 -f 非必须慎用)
将本地分支推送到远程分支 git push <远程仓库> <本地分支>:<远程分支>

分支操作:

使用 Git 下载指定分支命令为:git clone -b 
分支名仓库地址拉取远程新分支 git checkout -b serverfix origin/serverfix
合并本地分支 git merge hotfix:(将 hotfix 分支合并到当前分支)
合并远程分支 git merge origin/serverfix
删除本地分支 git branch -d hotfix:(删除本地 hotfix 分支)
删除远程分支 git push origin --delete serverfix
上传新命名的本地分支:git push origin newName;
创建新分支:git branch branchName:(创建名为 branchName 的本地分支)
切换到新分支:git checkout branchName:(切换到 branchName 分支)
创建并切换分支:git checkout -b branchName:(相当于以上两条命令的合并)
查看本地分支:git branch
查看远程仓库所有分支:git branch -a
本地分支重命名: git branch -m oldName newName
重命名远程分支对应的本地分支:git branch -m oldName newName
把修改后的本地分支与远程分支关联:git branch --set-upstream-to origin/newName

特别解释merge request 形式上传代码的形式和优点

一般来说会将当前的develop分支作为主分支,依据或是人员,或是功能模块将主分支打出若干小分支,一般开发人员开发时在小分支上进行开发,然后提交代码时先提交到对应的小分支上后再发起merge请求,由主分支有权限者进行检查后合并(注:小分支合并到主分支前需要将主分支的最新版本合并到小分支上)或者打回

缺点:麻烦

优点
1.单独一个分支出问题后不会影响到主分支,随便造,对git使用不熟悉的人也不会对代码仓造成严重的影响
2.权限最高的人对代码仓和各个分支可以按开发进度处理,里程碑时间线的逻辑性强
3.在merge之前可以用git自带的jekenis来进行代码扫描(注:jekenis的扫描逻辑可以自定义)可以保证代码质量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值