前端与监控git| 青训营笔记

168 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

课堂重点

今天没有课,但是小组项目开发的时候离不开git,于是想来复习一下

笔记

常用git后缀词

image.png

上传本地项目

git init                             // 初始化本地 Git 仓库,会生成一个 .git 隐藏文件夹  
git remote add origin https://xxxx   // 将本地项目关联远程仓库,后面的 https://xxxx 就是复制的远程仓库的链接  
git pull --rebase origin master      // 上传之前更新一下,确保没有冲突,master 为分支名称,--rebase 后面有介绍  
git add .                            // 添加目录下所有发生改变的文件  
git commit -m 'xxx'                  // 添加注释信息  
git push -u origin master            // 提交到 master 分支

git-remote-可以快速查看当前已经关联的远程仓库列表

git commit -am 'xxxx' 相当于git add. 加上git commit -m 'xxx'

git commit --amend 相当于上一次commit到本地仓库后但又有一个小文件更新要交上去,且不想重新commit一次记录,则可用这个方法

git merge test --squash --squash 表示合并,但是不生成 commit 记录,通常用于把本地分支合入远程分支

git merge --abort  取消合并

pull 和 fetch 都是下载远程分支,区别是 pull 会和当前分支合并,fetch 不会

# 查看所有本地分支  
git branch  
# 查看所有远程分支  
git branch -r  
# 查看本地和远程所有分支  
git branch -a
# 删除本地 test 分支  
git branch -d test  
# 删除远程主机的 master 分支  
git push origin -d master

合并分支

# 先切换到 master 分支  
git checkout master  
# 拉一下,看有没有更新  
git pull  
# 把 test 分支合进来  
git merge test  
# 查看状态,看有没有冲突的,有就打开 IDE 解决一下  
git status  
# 然后 add、commit、push 几个命令来一轮就 ok 了

git commit 说明规范

  • feat:添加新功能
  • fix:修复问题/BUG
  • style:注意不是指CSS,而是修改了如空格、缩进、逗号等代码风格相关,且不影响运行结果的
  • perf:优化相关的,比如功能优化、性能提升、提升体验等
  • refactor:代码重构,没有加新功能或者修复 bug
  • revert:撤消编辑,回滚到上一个版本、撤销上一次的 commit 之类的
  • test:测试相关,比如单元测试、集成测试等
  • docs:修改文档/注释,比如 README、CHANGELOG、CONTRIBUTE 等
  • chore:依赖更新/脚手架配置修改等,比如有改变构建流程、或者增加依赖库、工具之类的
  • workflow:工作流程改进
  • ci:持续集成
  • types:类型定义文件更改

git checkout test.js 撤销上次对test.js提交之后的所有更改 git checkout HEAD^ - test.js 只把 test.js 还原成上一个版本的,HEAD^表示上一个版本,HEAD^^上上一个版本 git rebase 和 git merge 的区别

  • git merge 会新建一条新的 commit,然后两个分支以前的 commit 记录都指向这个新 commit 记录。这种方法会保留之前每个分支的 commit 历史。
  • git rebase会先找到两个分支的第一个共同的 commit 祖先记录,然后将提取当前分支这之后的所有 commit 记录,放到目标分的最新提交后面。经过这个合并后,两个分支合并后的 commit 记录就变为了线性的记录了。
如下,需要把本地 test 分支合入 dev  
# 为方便理解,字母表示commit记录,数字表示提交时间顺序,可以理解为1就是1点提交的  
dev -> A1 -> B3 ->    这一行是远程 dev 分支的commit记录,A1/B3是你同事提交的  
      ↘ X2 -> Y4↗   这一行是拉取了 dev 分支后在本地的 test 分支 commit 记录  
  
# 现在需要把你本地的分支合并到远程的分支去  
# 用merge合并后,dev 分支看到的记录是这样的,M为merge记录的commit  
dev -> A1 -> X2 -> B3 -> Y4 -> M  
  
# 用rebase合并后,dev 分支看到的记录是这样的,注意顺序,且没有合并记录的commit  
# 简单说就是直接把 test 分支的所有新的 commit 拿出来直接拼到 dev 分支末尾,不管提交时间先后  
dev -> A1 -> B3 -> X2 -> Y4

合并冲突 合并时、或者拉取时等,发现有冲突,可能是其他同事提交的,自己不知道怎么冲突怎么选择,或者其他原因,总之不想合并了,都可以用 --abort 取消,比如合并的时候发现有冲突不想合并了 git merge --abort 取消合并即可

解决冲突 面试答法,先用git stash保存自己本地修改,然后git pull把远程的内容拉下来,然后git stash pop 把自己暂存的代码取出来,系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突,自行修改然后提交,同时得清空暂存区 stash clear

有的时候合并分支冲突是由于本地主分支没有更新导致,或者有时 git pull 的时候冲突,只需要掉本地主分支,再重新拉一下远程分支就好了。

有的时候冲突就只能解决冲突,使用 git status 看由于冲突导致没有合并成功的文件是哪些,然后去编辑器打开冲突的文件即可,也可用 cat <文件路径> 查看指定文件里冲突的部分,直接去编辑器改

或者就是用命令,比如把 test 分支,合入 master 分支时产生冲突。

# 只保留 test 的修改  
git checkout --theirs test.js  
# 只保留 master 的修改  
git checkout --ours test.js  
# 都保留  
git checkout --ours/theirs test.js  
# 查看冲突,都行  
git diff --theirs  
git diff --ours