团队开发,优雅的使用工具 + 命令行的配合着进行git操作

7,119 阅读6分钟

我正在参加「掘金·启航计划」

1.背景

已经手把手教同事很多遍操作进行git的操作,可能是由于没认真记笔记 or 真英语不行,每次提交PR代码或者遇到git上的一些bug都要进行询问,并手把手的帮他解决当前的问题,我说你遇到git不必怕,干就是了,宗旨就是不要干掉远程别人的代码,然后当前在你的本地的项目的代码可以完美的运行功能就OK了,之前我踩过比你严重的坑都遇到过,直接写一下遇到的项目中遇到的问题吧。

2.自己出现的bug问题

直接上之前遇到的在公司项目使用的管理平台是tfs,我也不是很懂怎么合分支出现的bug 我当时用的是 github 出品的桌面版工具 github desktop,在合并解决冲突的时候,出现了文件丢失的情况

出现的原因如下:

  1. 因丢失的那些代码从未提交过上gitLab

  2. 处理冲突文件时,可能不小心点到某按钮导致

  3. 丢失的代码也未做过备份,也未提交过master的分支上

如何解决?参考文章:# 本地代码丢失,如何找回未提交过的代码,踩坑日记 git代码管理

看了下文章,git会在.git这个隐藏文件夹下面 /object 会生成一些文件,并以两个字符串即'数字+字母' or '字母+字母' 可能还是 '字母+字母的组合',里面的文件是一些加密的文件

通过以下的bash命令找到文件所对应的内容:

git cat-file -p 文件夹名文件名

一个文件一个文件找应该比较慢,因为对读文件夹名称及读对应的文件名不熟悉,我觉得有个更方便的方法应该是用powershell应该可以做到多条进行读取,读对应这个文件夹的名称 + 文件名,遍历即可。

3.如何创建文件夹并关联远程仓库和创建本地仓库,以下两种方式

第一种方式

第一步:基于master分支并创立了本地分支和远程分支(但是未推送并不会在远程创立分支)

# 初始化仓库
1. git init
# [https...]项目所在远程仓库地址(不是远程分支名称,而是仓库地址)
2. git remote add origin [https....]
   git remote add origin [仓库名称]
# 拉取远程分支到本地,fetch origin(拿来)
3. git fetch origin master(dev是你要拉取的远程分支名称)
# 在本地创建dev分支并且切换到该分支
4. git checkout -b createFollow(本地分支名称)
# 拉取分支到本地
5. git pull origin master(远程分支名称)

第二步:推送代码到远程并创建分支,可采取以下两种方式的其中一种

1).
# 添加文件到暂存区
    git add . 
# 推送仓库分为createFollow
    git pull origin createFollow
2).
# 强制推送到远程分支并建立远程分支
git push --set-upstream origin znn

如图所示,分支就已经set up 从origin(源文件,远程仓库)

image.png

第二种方式

如图所示 image.png

tips:要理解上面的相关内容为什么可以这样子操作,弄懂下面这篇文章基本理解:

# 细读 Git | 弄懂 origin、HEAD、FETCH_HEAD 相关内容

4.git 遇到eslint不给提交给远程怎么办?

可以参考下以下完整的项目花裤衩大佬的后台管理系统下的 .eslintrc.js文件

      "vue/no-unused-components":"off",//当存在未定义而未使用的组件时,关闭报错
      "no-unused-vars":"off"//当存在未定义而未使用的组件时,关闭报错

并参考文章# 【前端】vue项目 git提交失败 running pre-commit hook:lint-staged

5.怎么合并代码并解决冲突

步骤如下:

工具方案进行merge

  1. 最简单就是用github desktop,熟悉工具的人应该都知道这个界面,点击工具中间的按钮,点击弹出界面最下方有一个很长的按钮 choose a branch to merge into 分支名称,中文的意思是合并你选择的一个分支到你这个分支下

企业微信截图_16643483125215.png image.png

  1. 选择完上面的分支 并点击下方长按钮, 下方会有'1 conflicted file' 即有1个冲突的问题,当你合并master分支testGitfollow分支上 ,点击相应的分支进行合并,并点击下方的create a merge commit,就完事了,解决冲突,通过github desktop + vscode配合着一起使用

image.png

  1. 看图,在vscode编辑器里面,HEAD是当前分支这片代码的内容,下方master就是来源的分支,即所需要merge的分支 用了 <<< 和 === 和 >>> 区分,相关的符号如下解释
    • <<<代表 当前分支
    • ===代表 分隔符
    • <<<代表 来源分支,即要合并的分支

image.png 4. 根据里面代码 我们可以点击上方的Accept Both Change 即可合并了代码了,合并完,回到github desktop,发现后面按钮变绿了,再点击 continue merge

image.png

  1. 最后一步在主界面点击push origin

image.png

  1. 等操作的loading滚动完就大功告成了。

git命令方案进行merge(git bash)

如何test1分支的代码合并test2分支的代码?

  1. 如何创建文件夹并关联远程仓库和创建本地仓库,以下两种方式 app端应该打不开该链接,可以上滑去看看
  2. 提交本地代码到远程的分支

tes1分支

git add README.md
git commit -m 'test1'
git push origin test1
  1. 拉取要合并分支的代码
git stash   # 查看下test1分支
git checkout test2
git pull
  1. 切换到test1分支,并合并test2分支
git checkout test1
git stash pop
git merge test2
  1. 解决冲突(直接打开vscode的项目 有对应的文件名冲突,解决冲突方式和上方方式工具方案相同)

企业微信截图_16643483015990.png

企业微信截图_16643483125215.png 解决完冲突

git push origin test1

这就大功告成了

6.如何回退版本

使用到的指令

git log----查看提交记录
git log --pretty=oneline----查看提交记录简略信息

git reset --hard HEAD^----回滚至上一个版本,可丢弃暂存区修改
git reset --hard 提交的id-----回滚至指定版本

参考文章

Git回退版本方法

7.如何删除远程分支

# 查看远程分支,上方的是本地的分支,下方的查看的是远程的分支(下方的会有相应的颜色)
git branch -a
# 切换到master分支,应该是master分支才有权限去删除对应的分支
git checkout master
# 删除远程分支 后面new_a是分支名称
git push origin --delete new_a
有时候有可能要输入账号和密码,输入即可

8.git常用指令以及提交前缀

git常用指令

  • git init-------初始化一个仓库
  • ssh-keygen -t rsa -C "youremail@example.com"-------生成ssh公钥
  • git add . ------添加文件到暂存区
  • git commit -m '提交说明' -----提交暂存到当前分支
  • git clone 项目地址 ----从远程库克隆项目
  • git remote add gitee2 git@gitee.com:divhub/ErJieDuan.git ---关联一个远程仓库
  • git branch-----命令会列出所有分支,当前分支前面会标一个*号
  • git remote -v -----查看远程仓库
  • git remote remove origin -----删除远程仓库
  • git push 远程分支名 master -----提交本地分支到远程
  • git pull 远程分支名 本地分支名 -----拉取分支
  • git push -f gitee2 master -----强制提交覆盖远程分支
  • git config --global user.name "***" ----本地用户名
  • git config –-global user.email "*****"-----本地邮箱
  • git config user.name -----查看用户名
  • git config user.email -----查看邮箱地址
  • git branch -a-----查看所有分支
  • git branch -d 分支名-----删除一个本地分支
  • git branch --v -----查看本地所有分支对应的远程分支使用命令
  • git branch --set-upstream-to=origin/dev dev 本地分支关联远程分支
  • git branch -help -----查看命令行参数
  • git checkout 分支名-----切换到某分支
  • git log----查看提交记录
  • git log --pretty=oneline----查看提交记录简略信息
  • git checkout -- 文件名-----丢弃工作区修改
  • git reset --hard HEAD^----回滚至上一个版本,可丢弃暂存区修改
  • git reset --hard 提交的id-----回滚至指定版本
  • git rm ------删除文件
  • git checkout -b 分支名 ------创建一个分支并切换到该分支
  • git merge 分支名-----合并指定分支到当前分支
  • git merge --abort -----取消合并分支
  • git config -l -- 查看现在的git环境详细配置
  • git status --用于查看在你上次提交之后是否有对文件进行再次修改。
  • git fatal: 拒绝合并无关的历史
  • 解决方法是:允许其合并历史。只需要在分支名后加上:--allow-unrelated-histories 即可(注意是两个中划线);

git提交前缀

  • build:表示构建,发布版本可用这个
  • ci:更新 CI/CD 等自动化配置
  • chore:杂项,其他更改
  • docs:更新文档
  • feat:常用,表示新增功能
  • fix:常用:表示修复 bug
  • perf:性能优化
  • refactor:重构
  • revert:代码回滚
  • style:样式更改
  • test:单元测试更改