- Date:2024-07-03

  • Time:15:19
  • Subject: CS
  • Tags: #git
    [[2024-07]]

交叉内容

[[git命令#- Date 2024-07-03]]

git工作区域与文件状态

三个区域

image.png|600

工作区

  • 工作区提交后回到暂存区,确实就是文件管理器看到的,编辑的区域,正常使用(操作)的区域

暂存区

  • 保存即将提交到git仓库的内容,临时存储
  • 可以先修改一部分,放到暂存区钟,再统一提交commit

本地仓库

  • git init 的仓库,保存了项目历史

文件状态

image.png|600

  • 未跟踪,新创建,git还没管理,
  • 未修改,管理起来的,但是没有修改的文件
  • 已修改,已经修改了的,没暂存
  • 已暂存,放到暂存区的文件

.gitignore 忽略文件

  • 把文件加入到里面,那么就会忽略这个文件
  • 假如已经加到版本库中,那这个文件就不起作用了,需要先从版本库删除中删除 git rm --catched 本地不删除,但是暂存和版本库都删除
1
2
3
4
5
6
*.txt , *.xls  表示过滤某种类型的文件
target/ :表示过滤这个文件夹下的所有文件
/test/a.txt ,/test/b.xls 表示指定过滤某个文件下具体文件
!*.java , !/dir/test/ !开头表示不过滤
*.[ab] 支持通配符:过滤所有以.a或者.b为扩展名的文件
/test 仅仅忽略项目根目录下的 test 文件,不包括 child/test等非根目录的test目录

分支

  • 十分重要
  • git branch <分支名> 创建分支
  • git checkout <分支名> 切换到分支(恢复文件),可能会有歧义
  • git switch <分支名> 专门用来切换分支
  • git merge <被合并的分支1> <目标分支2> 会将1合并到2中
  • git branch -d <删除的分支> 合并后可以删除,如果没合并就想删除,那得用 -D

冲突解决

  • 如果两个分支对同一行都修改了,那就不知道怎么修改了,会有冲突;但是只有一者修改了,那就可以合并
  • git merge --abort 终止合并

分支命名

image.png|600

  • feat——feature,功能开发
  • main——分支,稳定版本代码,可以随时发布的,不能直接修改,得用merge来改,用tag标记版本号
  • hotfix——问题修复分支,用于合并
  • develop——开发版本

变基rebase

image.png|600

  • 嫁接移植的感觉
  • 先switch到要移动的分支dev上,然后用 git rebawse <基的名字,branch名字>,然后就把dev移动到main上了,
  • 优点:不会有额外提交记录,线性的,直观简洁
  • 缺点:会改变提交记录,改变branch out的节点,避免在共享分支上使用

[!note]
在使用 Git 的 rebase 时,如果两个不同的分支对同一行代码进行了不同的修改,也会像merge那样产生冲突,这种冲突需要手动解决。