Git回顾
参考视频:【GeekHour】一小时Git教程
一句话定义: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配置和远程仓库
SSH与HTTPS之辨析与实践
关联本地仓库和远程仓库
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 的快捷方式,一键拉并合并。