Git备忘录(实时更新)

606 阅读6分钟

✊不积跬步,无以至千里;不积小流,无以成江海

git了太多次,发现自己笔记本上都写满了线上居然没留备忘。整合一下遇见的各种问题,新问题也会及时更新。

npm/pnpm的发展历史

npm:Node Package Manager pnpm:Performant Node Package Manager

生动例子的故事背景:

假设你是一个超级英雄团队的指挥官,你的任务是为团队成员准备各种强大的装备和工具,以便他们能够更好地对抗邪恶势力。

  • NPM 的作用:

NPM 就像是一个巨大的超级英雄装备商店。当你开始一个新的超级英雄项目时,你可以使用 NPM 来快速获取各种有用的工具和库。比如,你需要一个能发射激光的武器,你可以在 NPM 中搜索并找到一个合适的激光武器库,然后将它安装到你的项目中。

  • 为什么需要 PNPM:

随着时间的推移,你的超级英雄团队不断壮大,项目也越来越复杂。你发现使用 NPM 安装的大量工具和库占用了很多磁盘空间,而且有时候不同的项目可能会安装相同的库,导致重复浪费。

这时,PNPM 就出现了。PNPM 就像是一个更智能、更高效的超级英雄装备管理系统。它可以节省磁盘空间,并且确保不同的项目可以共享相同的库,同时还能保证每个项目的独立性和安全性。

  • 两者的关系:

假设我们把每个使用 NPM 安装的 Node.js 项目看作一个个独立的玩具箱。

当使用 NPM 安装一个包(比如“super-tool”)时,NPM 会在每个项目的目录下完整地复制这个包的所有文件。如果有多个项目都安装了“super-tool”,那么每个项目中都会有一份完全独立的“super-tool”副本。

例如,项目 A 和项目 B 都安装了“super-tool”,那么磁盘上就会有两份完全一样的“super-tool”的代码和资源,这就会占用很多不必要的磁盘空间,尤其是当有很多项目且安装了很多相同的包时,空间浪费就会比较严重。

PNPM 则更像是一个共享玩具柜。

当使用 PNPM 安装一个包时,它不会在每个项目目录下完整复制包的内容。PNPM 会将所有安装的包存储在一个统一的位置(通常是一个全局的存储区域)。然后,对于每个项目,它会通过硬链接或符号链接的方式将项目所需要的包链接到项目目录中。

这样,即使有多个项目都安装了“super-tool”,实际上在磁盘上只有一份“super-tool”的实际代码和资源,而各个项目只是通过链接指向这份资源。这就大大节省了磁盘空间,尤其是在处理大型项目或者多个项目共用很多相同包的情况下。

git 三分支和双分支

一、双分支管理

通常是指 master 分支和 develop 分支。

  1. master 分支:

    • 也称为主分支,代表着生产环境中正在运行的稳定版本。
    • 一般情况下,只有经过严格测试、确认没有问题的代码才能合并到 master 分支。
    • 通常 master 分支是受保护的,不能直接进行提交,只能通过合并请求等方式进行更新。
  2. develop 分支:

    • 开发分支,是开发人员进行日常开发工作的地方。

    • 新功能、修复 bug 等工作都在这个分支上进行。

    • 当开发到一定阶段,经过测试后,可以将 develop 分支的代码合并到 master 分支进行发布。

二、三分支管理

一般包括 master 分支、develop 分支和 feature 分支。

  1. master 分支:同双分支管理中的解释。

  2. develop 分支:也与双分支管理类似,作为主要的开发分支。

  3. feature 分支:

    • 当开发人员要开发一个新功能时,从 develop 分支创建一个新的 feature 分支。
    • 在这个分支上进行特定功能的开发,开发完成后合并回 develop 分支进行进一步的测试和集成。

git rebase 和 merge

merge就是将某个分支合并到main分支

rebase变基,就是将之前提交的每一个提交历史都保留到新的分支上。

git步骤

git init
git status
git add .
git commit -v
或
git commit -m "sdfsdfsdfsdfsd"

注意commit -v时。

  1. 按i会进入编辑模式
  2. esc会推出(下面有insert标识)
  3. 输入英文版冒号
  4. 输入wq完成commit

在github中新建repo,并复制ssh。然后

git remote add origin ~~SSH~~
git push -u origin master

新下载的仓库

新仓库下载后先 npm i,把该加载的加载上。

新分支提交

git status ,先判断一下状态。

git branch 新分支名,可以先尝试建立一下分支。

如果出现错误:致命错误:不是一个有效的对象名:'xxx‘。考虑到可能当前分支没办法建立,用粗暴方法先提交,过后再删除,让这个分支事件先处于一个节点状态。

git branch,确认一下branch。git branch 新分支名,再尝试建立一下分支。应该这次能够重新建立。(可以用git status确认下)

git checkout 分支名,通过checkout命令切换到新分支。

再重新执行一次git步骤。到git push origin时可能会出现报错,则按照提示进行git操作。

解决后运行

git pull origin 分支名   
git push origin 分支名 

完成提交后,就可以更新代码并及时提交到新分支了。

用图表具象化解释git分支及其基变的教程

nulab.com/zh-cn/learn…

常见问题mark

位于分支 分支名, 您的分支和 'origin/分支名' 出现了偏离, 并且分别有 6 和 6 处不同的提交。 (如果您想将远程分支与您的更改合并,请使用 "git pull")

解决办法:

git fetch origin
git reset --hard origin/分支名

在git中利用pull拉取远程仓库文件时报错: error: The following untracked working tree files would be overwritten by merge:

解决办法:

git fetch origin

git clean -f

git reset --hard origin/分支名

git push origin 分支名 

无文件要提交,干净的工作区

解决办法:

git rm -r --cached 
//删除所有submit。

报错:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。

解决办法:

git pull origin master --allow-unrelated-histories

当运行git至git push -f origin master:master时,会报错

错误:源引用规格 master 没有匹配 错误:无法推送一些引用到 'github.com:SSR.git'

解决办法:

git pull
git branch --set-upstream-to=origin/<分支> welcome-version
git push -u origin 分支名

更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。 提示:如果您希望先与远程变更合并,请在推送前执行 'git pull'。

解决办法:

git pull
git branch --set-upstream-to=origin/<分支> welcome-version
git push -u origin 分支名
git config pull.rebase true
git pull

请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记 提示:解决方案并提交。 解决办法:

git add .
git rebase --continue

成功变基并更新 refs/heads/分支名。

如何在手机上测试

命令如下:

npm build
npm run build
npm preview