介绍
- Linux社区设计完成
- 分布式版本控制
命令
-
设置用户名和邮箱
- git config --global user.name "xxx" - git config --global user.email "xxx" -
查看当前配置
- git config --list -
设置别名
- git config --global alias.co checkout -
文件状态划分
- 未跟踪: 默认情况下,git仓库下的文件没有添加到git仓库的管理中,我们需要通过add命令来操作
- 已跟踪
- staged: 暂缓区的文件状态,执行了add后的文件就放在索引区了
- Unmodified:执行完commit命令后的文件状态
- Modified:修改了添加过暂缓区的文件,会变成该状态
- 总结:git add会把文件状态变为staged,git commit 会将文件变成Unmodified,然后修改了文件内容,状态会变为Modified状态
-
什么是校验和
- git中所有的数据在存储前都进行计算校验和,然后以校验和来引用
- 作为本次提交的唯一commit id
- 通过校验和作为索引找到本次都修改了什么文件
- 40位的hash值
-
输出日志
- git log
- git log --pretty=oneline - git log --pretty=oneline --graph 图结构的形式展示,在多个分支并且合并过后有用- git reflog : 记录全部的操作,即使你reset回退的
-
版本回退
- git reset
- head指向该分支上最后一次提交
- HEAD^ 上一个版本 HEAD^^ 上2个版本 HEAD~1000 上1000个版本
- git reset --hard HEAD^
- git reset --hard commitId
-
管理远程服务器
- 如果本次已经有代码,然后创建了远程仓库那么想要关联这两个仓库的代码需要操作
- git branch --set-upstream-to=origin/master 先把本地和远程做一个跟踪处理/这个也可以用git branch --track 本地分支 orgin/远程分支 来实现
- git pull --allow-unrelated-histories 允许两个没有共同基础的分支进行合并
- git checkout -b main --track origin/main: -b main 可省略,意思是创建一个本地main分支,并且追踪origin的main分支
-
推送
- git push origin master:main 将本地master分支推送到远程origin的main分支上
-
如果要本地分支追踪的上流分支名字不一致
- 需要修改配置
- git config push.default upstream : push的时候找上流追踪的分支
- 这个配置默认是simple: 代表push的时候默认找相同的名字,找不到就报错
- Git config push.default current :代表push的时候默认找相同的名字,找不到就直接创建该名字的远程分支
-
合并
- git pull 等于 git fetch + git merge - git fetch只是将代码拉取下来,放在object中,然后git merge 才能合并看到代码 -
git原理
- git cat-file(去object下查看文件) -t(查看文件类型) 文件夹名+文件名前几位
- git cat-file(去object下查看文件) -p(查看文件内容) 文件夹名+文件名前几位
- git add的时候将文件添加到暂缓区,此时并没有commit对象可以找到他们
- 每一次commit提交都是一个commit对象,是树结构
- 在.git下的objects有一个文件(该文件就是git log打印出来的commit id,前两位是文件夹的名字,后面是文件名字)保存着一次commit的信息:有tree的索引,根据tree索引找到文件里,保存这修改的文件和文件修改对应的文件
-
rebase
- git rebase master :将master分支作为base,然后将当前dev分支的修改放到master后面,这样master的分支不会乱
- 会找到当前分支跟master的共同祖先,然后dev分支后面的修改都移动到master最后一次提交的后面
- 不要在master分支或者主分支上使用rebase