赞
踩
版本控制在软件开发中,可以帮助程序员进行代码的追踪、维护、控制等等一系列的操作
人们通常通过文件备份的方式来进行管理,再通过diff命令来对比两个文件的差异
由荷兰阿姆斯特丹VU大学的Dick Grune教授实现的,也算是SVN的前身(SVN的出现就是为了取代CVS的)
相较于老式的本地 管理来说,每个人都可以在一定程度上看到项目中的 其他人正在做些什么
是集中式版本控制有一个核心的问题:中央服务 器不能出现故障
Git是属于分布式版本控制系统(Distributed Version Control System,简 称 DVCS)
集中式版本控制 : 将仓库放到服务器,一旦服务器崩溃可能会导致代码及记录都消失
分布式版本控制 : 通过git clone把仓库完全镜像到本地,就算服务器出现问题也没有关系,记录和代码会在本地仓库保存一份,提交到远程仓库时会进行同步刷新
git : Git - Downloads
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量
地址 : /etc/gitconfig => 包含系统上每一个用户及他们仓库的通用配置
地址 : ~/.gitconfig => 只针对当前用户
地址 : 当前使用仓库的 Git 目录中的 config 文件,即.git/config => 针对该仓库
设置Git的 用户名和邮件地址
git config --global user.name 'coderstar'
git config --global user.email'123456@qq.com'
git config --list
如果不想每次都输入完整的 Git 命令
可以通过 git config 文件来轻松地为每一个命令设置一个别名
命令 : git checkout
设置别名 : git config --global alias.co checkout
使用 : git co
需要一个Git来管理源代码,本地也需要有一个Git仓库
通常有两种获取 Git 项目仓库的方式:
git init
git clone 地址
需要对文件来划分不同的状态,以确定这个文件是否已经归于Git仓库的管理:
通过使用 ( git add . ) 命令,可以使得文件被git跟踪,文件状态变为暂缓区
ps : 但是此时的文件并没有和commit对象建立联系,git log查看不到更改的记录
已跟踪的文件又可以进行细分状态划分:
Modified:修改了某个文件后,会处于Modified状态
不管是新增的文件、修改的文件,都需重新让 add && commit
git status => 检测文件的状态
git status -s || git status --short => 文件状态的简洁信息
git add => 文件添加到暂存区
git add 文件 => 跟踪新文件,并将其加入到暂存区
git add . => 将所有文件加入到暂存区
git commit => 文件更新提交,将暂存区的文件提交,和commit对象联系在一起
git commit –m "提交信息" => 提交文件,并写上记录
git commit --no-verify -m "XXX" => 忽略提交限制,一般eslint有
git commit -a -m "haha" => 相当于 git add. -> git commit -m 'haha' 的简写
git merge => 合并两分支代码 => git merge xxx分支名称
git merge dev --allow-unrelated-histories ( 该参数为了使得两毫不相干的分支合并,可加 )
git log => 查看一下所有的历史提交记录
git log => 详细记录
git log --oneline => 好看一点的记录
git log --pretty=oneline => 更好看一点的记录
git log --pretty=oneline --graph => 可以看到多分支的记录
ps : 空格继续看记录,q是退出键
git reflog => 不仅可以查看历史提交记录,而且切换版本的记录也会留下来
git reset => 版本回退
Git通过HEAD指针记录当前版本 :
可以通过HEAD来改变Git目前的版本指向( 切换版本 )
新建.gitignore文件 => 有些文件无需纳入Git 的管理,不需增加到缓存区
例如 vue 项目的.gitignore文件
在进行提交操作时,Git 会保存一个提交对象(commit object)
项目通常是多人开发的,所以会将本地仓库中管理的代码共享到远程仓库中
常见的远程仓库 :
不管是用哪个仓库,验证的方式都基本一样,这里使用gitee为例
对于私有的仓库需要进行验证
ps : 如果git bash中拉取不下来,记得在cmd环境中再试试
目前Git服务器验证手段主要有两种 :
拉取 : 测试仓库 => git clone 地址
ps : 一旦拉取仓库下来成功,就已经和远程仓库建立起了连接,可直接进行git操作
git add . => git commit -m 'change' => git push
在系统用户的钥匙串中(加密的),删除即可
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。
SSH以非对称加密实现身份验证
0. 步骤
1. 用户在命令行输入命令,会生成公钥和私钥
2. 把公钥放在远程仓库中
ssh-keygen -t ed25519 -C “your email"
.pub文件中的内容就是公钥,复制下来即可
git clone 地址
ps : 一旦拉取仓库下来成功,就已经和远程仓库建立起了连接,可直接进行git操作
ps : 如果git bash中拉取不下来,记得在cmd环境中再试试
添加远程地址:添加远程服务器(让本地的仓库和远程服务器仓库建立连接)
git remote add 远程仓库别名( 默认是origin ) 远程仓库地址
地址为HTTPS
验证方式则为 用户名 + 密码 > git remote add origin https://gitt.com
地址为SSH
验证方式则需配公钥和私钥 > git remote add origin git@gitter.git
ps : 一个本地仓库可以和多个远程仓库建立连接
origin => 远程仓库名称,一个本地仓库可以和多个远程仓库连接,所以要指定是哪个
ps :
建议 远程仓库分支名字 和 本地仓库分支名 保持一样
否则拉取和推送时,可能需要多敲些许命令
0. 前提是拥有本地仓库
git init => git add . => git commit -m 'message'
1. 添加远程仓库地址
git remote add origin git@gitee.com666.git
2. 触发输入账号密码 || 验证密钥,并拉取远程分支到本地
git pull
3. 分支关联,建立跟踪分支 ( 上游分支 ) =>
=> git branch --set-upstream-to=远程仓库名字/远程分支的名字 本地分支的名字
git branch --set-upstream-to=origin/master master
4. 把远程仓库代码和本地代码合并 => git pull 远程仓库名字 远程仓库分支
git pull origin master --allow-unrelated-histories ( 该参数为了使得两毫不相干的分支合并 )
5. 把代码推送到远程仓库中 --- 如果本地分支和远程分支名称不一样
git push ---- git push 远程仓库名字 远程仓库分支
3. 推送本地分支到远程,并建立远程跟踪分支 =>
=> git push --set-upstream 远程仓库名字 远程分支
git push --set-upstream origin dev || git push -u origin dev ( 简写 )
4. 若想要和远程的其他分支代码合并 => git merge 远程仓库名字/远程仓库分支
git merge origin/master --allow-unrelated-histories ( 该参数为了使得两毫不相干的分支合并,如果有关系可以不写 )
查看远程地址:比如上面从GitHub上clone下来的代码,它就是有自己的远程仓库的
git remote => 简洁信息
git remote –v => 详细信息
git remote rename 原仓库名 新仓库名
git remote rename origin gitlab
git remote remove 仓库名
git remote remove gitlab
git clone 地址 => 把远程仓库克隆到本地
git push => 将本地仓库的代码推送到远程仓库中
git push
git push -u 远程仓库名字 远程仓库分支
git push -u origin dev
git fetch => 从远程仓库获取最新的代码
git fetch
git fetch 远程仓库名字 远程仓库分支
git fetch origin dev
git merge => 合并两分支代码
git merge
git merge 远程仓库名字 远程仓库分支 允许两毫不相干的分支合并 ( 看情况加 )
git merge origin dev --allow-unrelated-histories
git pull => 从远程仓库pull代码,拉取远程代码到本地,并且合并
git pull => 相当于 git fetch + git merge
git pull 远程仓库名字 远程分支 允许两毫不相干的分支合并 ( 看情况加 )
git pull origin master --allow-unrelated-histories
对于重大的版本我们常常会打上一个标签,以表示它的重要性
创建tag标签 : git tag 标签名 (xxx版本号)
git tag v1.0.0
创建附注标签:通过-a选项,并且通过-m添加额外信息 => git tag -a 版本号 -m 信息
git tag -a v1.1.0 -m 'message,我干了什么'
基本查看 : 只能看到打的版本信息
git tag
详细查看 : 可以看到附注标签写的内容以及更改的代码内容 => git show 版本号
git show v1.1.0
默认情况下,git push 命令 并不会 传送标签到远程仓库服务器上
推送指定tag到远程仓库中 => git push 远程仓库名 xxx版本号
git push origin v1.0.0
推送全部tag到远程仓库中 => git push 远程仓库名 --tags
git push origin --tags
删除本地tag => git tag -d 版本号
git tag -d v1.0.0
删除远程tag => git push 远程仓库名 --delete 版本号
git push origin -d v1.0.0
回退到打tag的地方 => git checkout 版本号
git checkout v1.1.0
回退回来后,不要直接修改,若要修改,创建个新分支即可
git checkout -b '新分支名'
Git 的分支,其实本质上仅仅是指向提交对象的可变指针
master分支
Git 是怎么创建新分支的本质 => 只是创建了一个可以移动的新的指针
创建分支 => git branch xxx分支名
git branch testing
查看当前所有的分支
git branch
同时查看最后一次提交
git branch –v
查看所有合并到当前分支的分支
git branch --merged
查看所有没有合并到当前分支的分支
git branch --no-merged
切换分支 => git checkout xxx分支名
git checkout testing
Git 通过一个名为 HEAD 的特殊指针 知道当前在哪一个分支上
创建分支并同时切换 => git checkout -b 'xxx分支名'
git checkout -b testing
推送到远程仓库中 => git push -u 远程仓库名 远程分支
git push -u origin testing
或者
git push origin testing + git branch --set-upstream-to=origin/testing testing
删除远程分支
git push -d origin 分支名
删除本地分支
git branch -D 分支名
如果修改主分支,比如master 改成 main
git branch -M main
修改本地分支名称
git branch -m 原分支名 新分支名
修改远程分支名称
1.删除远程分支
git push --delete origin 分支名
2.修改本地分支名称
git branch -m 原分支名 新分支名
3.推送到远程仓库中
git push -u origin 分支名
git merge => 合并两分支代码 => git merge xxx分支名称 || git merge 远程仓库/远程分支
git merge dev --allow-unrelated-histories ( 该参数为了使得两毫不相干的分支合并,可加 )
需求 : A分支要合并B分支提交的commit
git cherry-pick commit-Id
1. 进入B分支
git log 查看提交记录,并记下commit-id
2. 切换到A分支
git checkout A
3. 合并记录
git cherry-pick commit-id
4. 推送到远程仓库
git push
需求 : 回退版本
1.本地回退
git reset --hard HEAD^ 回退上一个版本
git reset --hard commitid ( git log 查看 ) 回退指定版本
2. 覆盖远程
git push -f
需求 : 保留当前正在开发的代码,转而去开发其他需求
ps : 若有新文件产生,建议commit保存
1. 保留当前代码到本地缓存
git stash
2. 当开发完其他需求,想继续开发本代码时
git stash pop
在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase
在master上直接使用merge
git merge experiment
在experiment上直接使用rebase
git rebase master
再次执行master上的合并操作
git checkout master
git merge experiment
rebase是如何工作的 :
rebase和merge是对Git历史的不同处理方法:
rebase有一条黄金法则:永远不要在主分支上使用rebase
远程仓库有项目 ( 公司 )
0. git服务器验证,看上面文章内容
1. 克隆项目到本地
git clone xxxxxxxx地址
2. 一般在master分支上创建自己的分支或者功能分支 dev-star
git checkout -b dev-star
3. 把创建好的分支推送到远程仓库,建立跟踪分支 dev-star
git push -u origin dev-star
4. 编写代码
阿巴阿巴阿巴阿巴阿巴
5. 把本地代码添加到暂存区
git add .
6. 把暂存区代码和commit对象关联,生成提交记录
git commit -m 'feat: messsage'
7. 从远程拉取最新代码到本地
git pull
8. 推送本地代码到远程仓库
git push
9. 合并代码到master分支上
01 - 切换回主分支
git checkout master
02 - 合并最新的master代码
git pull
03 - 自己的分支或者功能分支
git merge dev-star
04 - 解决可能存在的冲突,提交合并的代码
git commit -a -m ' ' => git push
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。