Git简介
开源的分布式版本控制系统。
Git的工作区域和流程
workspace:工作区,平时进行开发改动的地方,当前看到最新的内容,在开发的过程也就是对工作去的操作
Index:暂存区,当执行git add的命令后,工作去的文件就被移到暂存区,暂存区标记了当前工作区中那些内容是被Git管理的,当完成某个需求或者功能后需要提交代码,第一步就是git add先提交到暂存区。
Repository:本地仓库,位于自己的电脑上,通过git commit提交暂存区的内容,会进入本地仓库。
Remote:远程仓库,用于托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改,本地仓库修改完成代码后通过git push命令同步代码到远程仓库。
一般来说,Git的工作流分为以下几步:
- 在工作区开发,添加,修改文件
- 将修改后的文件放入暂存区(git add)
- 将暂存区域的文件提交到本地仓库(git commit)
- 将本地仓库的修改推送到远程仓库(git push)
Git基本操作
比较简单的用法就省略了,大家看git官方文档吧
git add 和 git stage 的区别
它两是统一的,引入git stage是为了跟svn add区分。svn add是将某个文件加入版本控制,而 git add则是把某个文件加入暂存区。
考察关键点:
- 对 git工作区(Working Directory)、暂存区(Stage)和 历史记录区(History)以及转换关系的了解
- git add 和 git stage的了解
git pull 和 git fetch的区别
git fetch操作仅仅只会拉取远程的更改,不会自动进行merge操作。对我们当前的代码没有影响
- git pull = git fetch + git merge
- git pull --rebase = git fetch + git rebase
git merge 和 git rebase的区别
git merge在不是fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似Merge branch 'xxx' into 'xxx'
git revert
回退某次的提交,此操作不会修改原本的提交记录,而是会新增一条提交记录来抵消某次的操作。
git revert <commit-id> // 回滚单次
git revert [commit-id1] [commit-id2] // 前开后闭区间,即不包括commit1,包括commit2
git reset
直接将提交记录退回到指定commit上
git reset --hard ^HEAD // 丢弃本次提交的代码(暂存区也无代码)
git reset --soft ^HEAD // 丢弃本次提交的代码(暂存区有代码)
支持三种标记:
- --mixed 会影响到暂存区和历史记录去,也是默认选项
- --soft会影响历史记录区
- --hard 影响工作区、暂存区和历史记录区
git reset直接删除commit记录,从而会影响到其他开发人员的分支,所以不要再公共分支上做这个操作
git reset 、git revert、git checkout 有什么区别
共同点:用于撤销代码仓库中的某些更改。
| reset | revert | checkout | |
|---|---|---|---|
| commit | 可以将一个分支的末端指向之前的一个commit。然后在下次git执行垃圾回收的时候,会把这个commit之后的commit扔掉 | 创建新的commit来撤销commit,这样能保留之前的commit,比较安全,同样会覆盖本地的修改,执行前,建议stash和commit | 可以将HEAD移到一个新的分支,并更新工作目录。因为可能覆盖本地的修改,所以执行这个命令前,我们需要stash或者commit缓存区和工作区的更改 |
| 文件 | 只是把文件从历史记录区拿到暂存区(--soft) | 不支持文件层面的操作 | 则是把文件记录拿到工作去,不影响暂存区的内容 |