1、优势
|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 本地版本控制 | 只在本地电脑维护多版本,不能共享,且容易出错
|
| 集中式版本控制 | 将历史版本等信息统一维护到一台机器上,每次只拉取当前版本内容得到临时拷贝(不携带历史提交信息等),可共享,但同步必须使用服务器,单点故障数据全丢失
|
| 分布式版本控制 | 本地拉取得到完整仓库(携带所有历史版本信息),相互之间可直接通过服务调用同步更新,但一般会设一台服务器作为公共交换点,但并不是一定需要 可共享,同步可不经过服务器,单点故障可容错
|
2、远程仓库 VS 本地仓库
分布式版本控制一般会设置公共交换点,如github,叫做远程仓库
自己电脑上的仓库叫做本地仓库
远程仓库的分支叫做远程分支
本地仓库的分支叫做本地分支
git pull 将远程仓库拉取到本地仓库
git push 将本地仓库推送到远程仓库
3、git快照流
git通过快照保存不同版本,头指针HEAD指向当前分支版本

4、工作区 VS 暂存区 VS 提交区
工作区:当前的目录,做修改的地方
暂存区:git add 后修改内容存入暂存区
提交区:git commit -m "描述信息" 暂存区内容提交到仓库内
5、常见指令
remote:操作远程仓库的命令前缀
origin:git为远程仓库起的默认名
|------------------------------------------------------------------|-------------------|
| | |
| git init | 初始化,创建.git |
| git clone 远程仓库地址 | |
| git remote add origin 远程仓库地址 | 将本地仓库与远程仓库建立对应关系 |
| git pull origin 远程分支名 git pull | 拉取并自动合并 |
| git fetch origin 远程分支名 git fetch + git reset --hard origin/远程分支名 | 拉取,但不合并 + 重置头指针 |
| git push origin 本地分支名:远程分支名 git push | |
| git branch --set-upstream-to=origin/远程分支名 本地分支名 | 将本地分支与远程分支建立对应关系 |
| git status | |
| git diff | |
| git add --all | |
| git commit -m "描述信息" | |
| git checkout -b 分支名 | |
| git checkout 分支名 | |
| git branch -D 分支名 | |
| git merge | 合并两个分支的变更记录 |
| .gitingore | |
| git rm 文件名 | 将文件从暂存区移除 |
| git log | |
| 撤销已提交 | |
| 撤销已推送 | |
| git stash + git stash pop | 暂存未提交内容 + 恢复未提交内容 |
| | |
6、git checkout -b 分支名 VS git checkout 分支名
已暂存、已修改 的内容属于工作区,不属于任何一个分支
如果不想让未提交内容跟着切换分支,使用 git stash 暂存未提交内容 + 切换到目标分支 + git stash pop 恢复未提交内容
| 场景 | git checkout 已有分支 |
git checkout -b 新分支 |
|---|---|---|
| 创建分支 | ❌ 不创建 | ✅ 创建 |
| 切换分支 | ✅ 切换 | ✅ 切换 |
| 无冲突时,未提交内容 | ✅ 跟随切换 | ✅ 跟随切换 |
| 有冲突时,未提交内容 | ❌ 拒绝切换 | ❌ 拒绝切换 |
具体场景:
在test1分支上新建test2分支 未暂存和已暂存的内容都会带到test2分支上 然后此时checkout test1 这些内容依旧会被带到test1分支上
7、合并冲突
同一文件的变更记录有冲突