CVS 和 SVN 属于集中式版本管理
Git 属于分布式版本管理
区别:
集中式管理是把整个仓库放到服务器
分布式管理是每台电脑都有一个对应的仓库,可以在本地提交,然后再同步到服务器的仓库
优缺点:
集中式管理的服务器如果崩了,那么服务器的文件就没了
分布式管理的服务器如果崩了,那么可以用本地的仓库推送到另一台服务器,所以说本地仓库就是远程仓库的一个备份
安装Git后,要做的第一件事就是配置用户提交的信息,即设置你的用户名和邮件地址
这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改
如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git 都会使用这些信息

配置目录文件:.gitconfig 或 C:\Users\Vincent\.gitconfig 文件
查看配置信息:

提示:如果命令行配置的方式有问题,可以直接打开配置文件配置


https://www.jianshu.com/p/494115f98492
有两种方式获取:
创建本地仓库:git init
克隆远程仓库:git clone
git add . 开始跟踪文件,添加到暂存区git commit -m "xxx" 文件提交到 Git 仓库简化写法:git commit -a -m “xxx” (只对修改文件有效)
如果修改已跟踪的文件需要重新添加到暂存区

untracked:未跟踪状态
git status 查看文件状态
git status -s 查看简洁的信息
通过 git log 可以查看所有的提交历史
简化写法:git log --pretty=oneline | git log --pretty=oneline --graph
.gitignore
在实际开发中,这个文件通常不需要手动创建,脚手架会帮你生成并配好,在必要的时候添加需要忽略的内容即可
.DS_Store # mac系统里面会自动生 产的文件
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

提交的唯一标识(commit id)
根据标识查找提交的文件
Git 通过 HEAD 指针记录当前版本,我们可以通过 HEAD 来改变 Git 目前的版本指向:
git reset --hard HEAD^
git reset --hard HEAD~1000 # ~后加回退数字
git reset --hard 2d44982 # 校验和选前7位即可
如果反悔了,可以通过 reflog 查看操作历史,找到要回退版本的校验和,然后回退即可
远程仓库(Remote Respository)
之前的操作都是基于本地仓库,别人无法拿到,要想别人拿到就得把代码共享到远程仓库
我们可以通过第三方的Git服务器,比如:Github,Gitee,Gitlab等,来搭建我们的 Git 服务
Gitee 和 GitLab 公司采用的比较多,而 GitHub 一般用来做开源项目,协议一般用MIT

对于私有仓库的操作需要对身份进行验证,共有两种方式:

因为HTTP是无状态的,所以每次对远程仓库的操作都需要登录
为了避免每次都要登录,可以安装一个 Git Credential Manager for Windows 的辅助工具(默认会安装),它会管理你的凭证,自动帮你验证用户名和密码
通过下面代码可以查看是否安装:

然后就可以克隆,首次操作远程仓库会让你登录,后面就不会了

提交代码到远程仓库:

然后push就不需要你登录了

然后回到远程仓库刷新查看,发现文件已经更新了

删除凭证:


Secure Sehll(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境
SSH以非对称加密实现身份验证
对称加密和解密的密钥都一致的,非对称加密用私钥,解密永公钥,安全性更高
首先生成公钥和私钥:
# -t 类型:加密类型 -C 注释:你的邮箱
ssh-keygen -t ed25519 -C "your email"
ssh-keygen -t rsa -b 2048 -C "your email" # 老的加密类型

打开公钥文件复制里面的内容




然后就可以克隆了


提交代码到远程仓库:


目的是让本地分支和远程分支建立连接,每次在push/merge/pull时不用指定远程仓库分支,它会默认匹配上游分支

git fetch # 注意:要先fetch一下,获取远程有哪些分支
git branch --set-upstream-to=origin/main
本地分支和远程分支即没有共同的祖先,祖先就是上一个版本(commit对象)

git merge --allow-unrelated-histories

这个问题只出现在:本地分支的名字和远程分支的名字不一样,比如github,gitlab的主分支是main,而本地的是master
现在的问题是:就算你给master分支设置了上游分支(origin/main),当你push的时候,默认还是推送的是当前分支(origin/matser),这是因为push的默认配置是simple,而simple就是当前是什么分支,远程仓库就推送什么分支,此时可以修改push的配置为upstream,它可以把上游分支推送给远程分支
# 解决方法一(推荐)
git config push.default upstream # 默认是simple,推送的远程分支是当前分支;upstream推送的远程分支是上游分支
# 解决方法二
git checkout --track origin/main
git checkout main
# 初始化本地仓库
git init
# 添加远程仓库
git remote add origin xxxx
# 从远程仓库获取内容
git fetch
git branch --set-upstream-to=origin/main
git merge --allow-unrelated-histories
# git push
git config push.default upstream
# 换一种做法
git checkout main
理解: 你在哪个版本设置,它就停留在哪个版本
# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "附注标签"
# 查看标签
git tag
# 删除标签
git tag -d v1.0.0
# 将本地tag push远程仓库
git push origin v1.0.0 # 推送指定标签
git push origin --tags # 推送所有标签
# 删除远程的tag
git push origin -d v1.0.0
理解:分支就相当于是一个文件夹,它总是指向最后一个版本,它会随着你版本的推送而移动
创建分支
git branch testing
git checkout testing
# 合并
git checkout -b testing
合并分支
git merge testing # 默认与当前分支合并
git add .
git commit -m ""
查看所有的分支
git branch
删除本地分支
git branch -d testing
# 初始化本地仓库
git init
# 添加远程仓库
git remote add origin xxxx
# 从远程仓库获取内容
git fetch
git branch --set-upstream-to=origin/main
git merge --allow-unrelated-histories
# git push
git config push.default upstream
# 换一种做法
git checkout main
推送一个远程分支:
git push origin develop
# 李四操作
git checkout develop
删除远程分支
git push origin -d develop

和merge功能类似,区别是它可以让提交历史结构更简洁,merge会记录所有提交历史,结构比较复杂
黄金法则:一定不要在主分支上使用rebase
git checkout experiment # 切换到要合并的分支
git rebase master # 合并后,提交了历史的图结构就成线性


git checkout develop
# 1.检查服务器是否有origin/develop这个分支
# 2.创建一个本地的develop分支
# 3.让本地的develop分支自动跟踪origin/develop
# 4.切换到develop分支
git add .
git commit -m ""
git pull
git push
git tag
git checkout -b develop
git push origin develop
git merge develop
git rebase
搭建项目
git add .
git commit -m “初始化项目”
连接远程仓库
如果你是本地创建的仓库,那么你需要和远程仓库建立连接
# 仓库名称 仓库地址
git remote add origin https://gitee.com/vincentgzxGZX/git-demo.git
git remote remove origin # 断开仓库连接
git remote # 查看仓库连接
git remote -v
设置上游分支
git branch --set-upstream-to=origin/master # origin/main
拉取仓库
git fetch
允许合并没有共同base分支
git merge --allow-unrelated-histories
合并仓库
git pull origin master --allow-unrelated-histories
修改push的默认属性(可忽略,在本地分支和远程分支不一致时使用)
git config push.default upstream
推送远程仓库
git push
打开vue项目远程来接远程仓库,直接push就可以了
