Git: 开源的分布式版本控制系统
特性: 1. 直接记录快照, 而非差异比较
2. 近乎所有操作都是本地执行
Git中的三个区域: 工作区, 暂存区, Git仓库
三种状态: 已修改modified, 已暂存staged, 已提交committed
获取Git仓库的两种方式:
1. 将尚未进行版本控制的本地目录转换为Git仓库
2. 从其他服务器克隆一个已存在的Git仓库
工作区中文件的4中状态:
未被Git管理: 未跟踪Untracked
已被Git管理:
未修改Unmodified(终极结果) 已修改Modified 已暂存Staged
Git命令:
初始化一个git仓库: git int
查看文件状态: $ git status 或者 $ git status -s
暂存: $ git add a.txt
提交: $ git commit -m '创建num1'
撤销: $ git checkout a.txt
一次性暂存当前目录下所有未上传的文件: $ git add .
取消暂存的文件: $ git reset HEAD a.txt
跳过使用暂存直接提交: $ git commit -am '跳过'(或者-a -m)
对新增文件不可以,必须是已经被管理的文件
移除文件:
从Git仓库和工作区中同时移除: $ git rm -f c.txt
只从Git仓库中移除但保留工作区中的: $ git rm --cached c.txt
查看版本历史: $ git log (英文状态下按Q退出)
$ git reset --hard 085fb05 回退: 可以回到085fb05
$ git reflog 可以查看回退记录
.gitignore 忽略文件
去百度搜git log格式化配置 git config --global alias.ll "log --graph --pretty=format:'%C(yellow)%h%Creset -%C(cyan)%d%Creset %s %Cgreen(%an, %cr)' --abbrev-commit"
放在里面执行 就可以直接使用格式化之后的git ll
开源是指不仅提供程序还提供程序的源代码
闭源是只提供程序, 不提供源代码
应该遵守开源许可协议 1.BSD 2.Apach 3.GPL(强制开源, 具有传染性) 4.LGPL 5.MIT(限制最少, 对商业友好)
为什么拥抱开源:
1. 开源给使用者更多的控制权 2. 开源让学习变得容易 3. 开源才有真正的安全
开源项目托管平台: 1. Github 2. Gitlab(私有性) 3. Gitee(国内)
远程仓库有两种访问方式:
1. HTTPS: 零配置
2. SSH: 需要进行额外的配置, 私钥和公钥
克隆: $ git clone git@gitee.com:mmh1107/git_ssh.git
只能克隆主分支
分支作用: 防止互相干扰, 提高协同开发
master主分支: 用来保存和记录整个项目已完成的功能代码. 不允许程序员直接在master主分支上修改代码
功能分支指的是专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到 master 主分支上.
查看分支: $ git branch
创建分支: $ git branch login(新建的分支名字)
切换分支: $ git checkout login
快速创建和切换分支: $ git checkout -b reg(分支的名字)
合并分支:
1. 切换要合并的主分支上面
2. $ git merge reg(要合并的分支名字)
删除分支: $ git branch -d login(要删除的分支名字) 不可以处于当前分支删除本分支, 要切换到别的分支上进行删除
基于谁创建的分支, 之前的分支上面有什么, 新建的就有什么, 之后的分支修改是独立的, 互不影响的
在工作区创建: $ touch a.txt(文件名字)
将本地分支推送到远程仓库:
第一次: $ git push -u origin login(:log名字设置不一样时)
之后推送: $ git push
查看远程仓库中所有的分支列表: $ git remote show origin(远程仓库名称)
指定拉取远程的指定分支: $ git fetch origin reg(远程的):reg(本地的)
拉取远程分支的最新的代码: $ git pull
删除远程分支: $ git push origin --delete reg(远程分支名称)
强制删除本地分支: $ git branch -D reg
冲突合并:
两个不同的分支中, 合并的时候, 同一个文件进行了不同的修改