一句话定义:Git是一个免费开源的分布式版本控制系统。
版本控制系统可以分为两种,1.集中式(SVN,CVS);2.分布式(git)
git的工作区域和文件状态
git的工作区域

git中文件也存在下面几种状态
添加和提交文件

git reset
默认是mixed。这三种模式实际上就是回退程度的区别。下图可以解释区别,其中工作区是本地实际的文件,暂存区是git add后的区域。

当然,如果误操作了git reset也没关系,可以使用git reflog查看修改记录,然后再使用git reset回退。

git log和git reflog的区别
| 项目 | git log |
git reflog |
|---|---|---|
| 作用 | 查看分支上的提交历史 | 查看 HEAD 或分支引用的变动历史 |
| 内容 | 显示当前分支的提交(commit)记录 | 显示 HEAD 或分支引用的所有变动(如 reset、rebase、commit) |
| 记录范围 | 只包含分支上可达的 commit | 包括被丢弃、回滚、rebase 覆盖的 commit |
| 保留时间 | 只要 commit 没有被垃圾回收就会一直在 | 默认保留 90 天(可配置),之后会被 Git 回收 |
| 常用场景 | 查看项目历史、提交说明 | 误操作恢复(如找回 reset 丢失的提交) |
| 可见性 | 用户面向,逻辑提交历史 | Git 内部记录,供恢复使用 |
| 示例命令 | git log --oneline |
git reflog |
git diff
比较工作区和暂存区之间的差异

进行git add后,上面就无区别了。
比较工作区和版本库之间的差异
git diff HEAD(对比当前工作区的文件和最新一次提交(HEAD)之间的差异)

比较暂存区和版本库之间的差异 : git diff --cached
比较两个不同版本库之间的差异

HEAD~n表示前n个版本


git rm删除文件
如果不用git rm,那正常的操作流程是,先rm删掉文件,然后git add同步到暂存区。
上面流程可以用git rm,即同时删除工作区和暂存区的文件。
gitignore
匹配规则例子:


SSH配置和远程仓库
关联本地仓库和远程仓库
git push -u 中的 -u 是--set-upstream的简写,作用是:
把当前分支和远程分支绑定,以后你只需输入 git push 或git pull就行,不用每次指定远程和分支名。
当然,下面中远程仓库需要新建,然后就可以通过下面步骤把本地代码同步到远程仓库了。

比如:我想要把hhh分支上的推送到远程的main,git push origin hhh:main
分支以及合并冲突
分支合并:merge和rebase
merge
你在哪个分支执行 git merge,就是把“别的分支”合并到“你当前所在的分支”上。
比如下面,在main分支上使用merge dev,就把dev合并到当前的main上,此时会有产生一个新的提交(如下面的“merge")。

rebase
把当前分支的提交“挪到”目标分支的最末尾,重新“重放”一遍,形成一条线性的提交历史。



git pull 和 git fetch
git fetch 把远程仓库的更新拉到本地,但不影响你当前的代码(不合并、不修改工作区)。
| 命令 | 拉代码 | 自动合并 | 修改工作区 |
|---|---|---|---|
git fetch |
✅ | ❌ | ❌(不影响当前分支) |
git pull |
✅ | ✅ | ✅(直接合并) |
git fetch 安全、可控,适合先看看有没有冲突再决定怎么合并。
git pull 是 fetch + merge 的快捷方式,一键拉并合并。

