Git分布式版本控制系统
1. 版本控制系统
版本控制系统主要分为两类:集中式、分布式。
集中式:SVM(工作流程:所有的文件都保存在中央服务器上,每个电脑上只保存了一个副本,当需要修改时,先下载中央服务器上的最新版本文件,添加修改内容,再上传到中央服务器中)
缺点:单点故障问题,如果中央服务器出现网络问题或者故障,所有子服务器将无法工作。
分布式:Git(每个人的电脑上都有一个完整的版本库,所以在本地进行修改,没有单点故障问题,当中央服务器出现故障,也可以正常工作;当需要将自己内容分享给其他人时,只需要将仓库同步即可。)
2. 安装与使用
1. 下载后,查看是否存在: git -v
2. 全局配置
配置用户名: git config --global user.name wooyeon
配置邮箱:git config --global user.email ***
保存用户名和密码:git config --global credential.helper store
查看配置信息:git config --global --list
3. 创建仓库
1. 本地创建仓库:
git init
git init my-repo
2. 克隆远程仓库:git clone ***
4. 工作区域
1. 工作区-->git add --> 暂存区 --> git commit --> 本地仓库
2. 基本命令
2.1 创建仓库
git init my-repo
2.2 查看状态以及处于哪个分支
git status
2.3 添加到暂存区
git add file1.txt # 添加到暂存区
git add *.txt # 添加所有txt文件到暂存区
git add . # 添加所有文件到暂存区
2.4 提交到仓库
git commit -m "第一次提交" # 提交到仓库
2.5 查看提交历史信息(提交记录)
git log
git log --oneline # 查看简洁的提交信息
2.6 回退到某个版本
git reset --soft 版本id # 回退到某个版本,并保留工作区和暂存区的内容
git reset --hard 版本id # 回退到某个版本,工作区和暂存区均不保留
git reset --mixed 版本id # 回退到某个版本,只保留工作区内容,不保留缓存区内容。(默认)
2.7 在执行完回退后,可以查看暂存区和工作区内容
ls # 工作区
git ls-files # 查看暂存区、版本库中的内容
2.8 出现误操作,具体操作:
先查看操作的历史记录
git reflog
回退到历史版本即可
git reset --hard 版本id
2.9 查看工作区、暂存区、本地仓库之间的差异。不同版本之间的差异。不同分支之间的差异
git diff # 默认比较工作区与缓存区间的差异
git diff HEAD # 比较工作区与版本仓库中的差异
git diff --cached # 比较缓存区和版本库中的差异
git diff 版本id 版本id # 比较两个版本之间的差异
git diff 版本id HEAD # 比较最新提交与固定版本之间的差异
git diff HEAD~ HEAD # 比较最新版本和上一个版本之间的差异
git diff HEAD~2 HEAD # 比较最新版本和退两个的版本的差异
git diff HEAD~2 HEAD file1.txt # 比较最新版本和退两个的版本中file1文件的差异
2.10 从版本库中删除文件
1. 先手动删除工作区的文件,然后使用git add . 更新缓存区,再git commit。
2. 简单方式
git rm file1.txt # 在版本库中删除了该文件,在版本库、工作区和缓存区都会删除
git commit -m "delete file1.txt" # 必须要进行提交
git rm --cached fil1.txt # 只在版本库中进行删除,工作区还是存在
2.11 忽略文件.gitignore文件。该文件中的内容不会上传的版本库中。(不上传该文件夹中设置的内容)
2.12 远程仓库,使用SSH进行链接。
1. 从远程克隆到本地: git clone ssh***
2. 关联本地仓库和远程仓库:先在github创建一个仓库再进行关联。
git remote add origin https://github.com/wooyeonicon/my-repo.git # 关联 git remote -v # 查看当前仓库对应的远程仓库的别名和地址 git branch -M main # 指定分支为main git push -u origin main # 将当前仓库的main分支和远程仓库的main分支关联起来
注意:在关联时需要输入Username和Password,在setting里设置token.
3. 关联后,远程仓库中有修改,需要进行拉取
git pull origin main # 将远程仓库的main分支,拉取到本地仓库。(使用pull时,还会自动对本地仓库和远程仓库的内容进行合并;fetch则不会自动合并,只拉去远程仓库内容)
2.13 分支
1. 查看当前仓库的所有分支
git branch
2. 创建新分支
git branch dev # 创建dev分支
3. 切换到dev分支上
git checkout dev # 不建议使用,如果分支名和文件名相同,在切换到某个文件修改前的状态有歧义
git switch main # 切换到main分支
4. 合并分支:将dev分支上的内容合并到主分支main
首先切换到main分支。git merge dev # 合并到主分支。:wq进行保存。
5. 查看详细分支图
git log --graph --oneline --decorate --all
6. 删除合并后的dev分支
git branch -d dev # dev分支已经合并到其他分支,采用该命令进行删除。
git branch -D dev # dev分支如果没有被其他分支合并,需要强制进行删除。
7. 解决合并分支冲突
如果两个分支对同一个文件内容进行修改,在合并分支时会出现冲突问题。例如:
1. main分支(main1.txt)。
2. git switch feat # 创建feat分支
3. vi main1.txt (修改内容)# feat分支上修改main1.txt文件内容。
4. git commit -a -m "feat:1" # 在feat分支上添加并提交main1.txt。
5. git switch main # 切换到主分支
6. vi main1.txt # main分支下修改内容。(注意:在修改前,打开的时候,并不是feat分支修改后的内容,是原来main分支创建的main1.txt的内容)
7. git commit -am "main:1" # 可以是-am
8. git merge feat # 报错
9. git status # 查看冲突文件
10. git diff. # 查看冲突具体内容
11. vi main1.txt # 编辑,将需要的内容进行保留
12. git commit -am "merge conflict". # 进行添加并提交即可
13. 中止合并:git merge --abort
2.14 变基(合并):最终会形成一条线
1. 将dev分支变基到main分支
git switch dev
git rebase main
2. 将main分支上部分变基到dev分支上
git switch main
git rebase dev
注意:前两种不同方式最终会有所不同。