git
版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 简单讲就是备份和
记录. 接下来我们要了解三种不同版本控制的发展历程.。
-
本地版本库:
人们把项目拷贝到本地磁盘上进行备份, 然后以命名方式来区分. 这种做法好处是简单, 但坏处也不少比如备份比较多或许就会混淆不同版本之间的区别. 那为了解决这个问题, 有人就开发了一个本地版本的
管理系统
-
集中化版本控制系统
本地版本控制系统能够将不同版本的文档保存下来并且借助版本记录可以很方便定位相关文件但又引入了新的问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )应运而生。这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法 。
-
分布式版本控制系统
为了解决集中化版本管理所带来的问题分布式版本管理控制系统(Distributed Version Control System,
简称 DVCS)就应运而生了. 在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等, 客户端不只是提取出
最新版的文件快照, 而是把最原始的代码仓库镜像到本地. 这样一来,任何一处协同工作用的服务器发生
故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代
码仓库的完整备份。
本地版本库
-
生成本地版本库
#git bash ##选择目录 cd G:\gitee_gitee ##创建本地库 git init
git bash 类似于linux系统命令(最初由linux之父编写并开源),使用cd进入选定目录,ls,pwd…
当然你也可以在某个文件夹右键git bash,再创建本地库
-
设置提交信息
git config --global user.name "your_username"
git config --global user.email your_email@domain.com
git config --list 查看所有配置
注意 git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用
这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
-
工作区代码(ide中的代码)提交本地库
#加入所有文件到暂存区 git add . #提交本地库 git commit -m "信息"
-
查看状态
#文件提交情况:未加入暂存区,缓存区未提交本地库 git status
本地版本库结构
使用以上(1)中命令就会在选定的G:\gitee_gitee 下生成 .git文件夹
- .git
- hooks***(钩):存放一些shell**脚本
- Info:exclude:存放仓库的一些信息
- logs:保存所有更新的引用记录
- objects:存放所有的git对象
- config:git仓库的配置文件
- index*:暂存区(stage),一个二进制文件*
- …
- README.md:自己新建的markdown文件,用以作仓库大纲,介绍
常用命令:
#查看提交日志 一行显示
git log --pretty=oneline
#查看提交日志 一行显示,表格显示
git log --graph --pretty=oneline
# 完整日志
git reflog
# 比较两次提交改变
git diff HEAD -- git01.txt
#版本库状态
git status
#添加暂存区
git add file
#提交版本库
git commit -m "msg"
#加入暂存区并提交
git commit -am "msg"
#本地删除,找回
git checkout file
#回退版本
git reset --hard id
回退前N版本
git reset --hard HEAD~N
或
git reset --hard HEAD^^^^^^(N个^)
#本地库删除
git rm file
或
git commit -am
分支
开发企业项目中在使用Git 或者其他类似版本控制软件对项目版本进行管理时,多人合作的项目在开
发时通常不会直接在主干master 上进行操作,而是重新开辟新的分支,在新的分支上进行开发 调试 等
操作,当项目调试通过时才会将分支项目的代码合并到主干中,这是在实战中比较好的一种策略,特别
是多人协同开发一个项目的情况下尤其明显。Git 对于分支操作提供了一下基本命令:
切换分支
git checkout 分支名
创建分支并切换分支
git checkout -b 分支名
删除分支,需要切换分支操作
git branch -d 分支名
强制删除分支
git branch -D 分支名
显示所有分支
git branch -a
重名
git branch -m old new
或
git branch -M old new
删除远程分支
git push -u 远程地址 :分支名
推送分支
git push -u 远程地址 分支名
克隆远程库(在本地存在形式就是本地库)
git clone 远程仓库地址
拉取修改的内容
git pull 仓库
拉取远程指定分支并在本地创建分支
git checkout -b local_branch origin/remote_branch
合并分支。一般在主分支合并
git merge 分支名
冲突
开发中对不同分支下同一文件进行修改后执行合并时就会出现文件修改冲突情况,这里说明一种比较常见的冲突问题 以master 和leaf01 两个分支进行演示说明。
-
分支合并解决(本地)
两个分支同时修改同一行,合并分支,后提交的会报错,这时只要后一个对冲突文件做出解决并提交就可以.
两个分支修改同一行,合并报错,在后提交分支操作方(报错方)对冲突文件做出修改,再提交
-
远程push冲突
两个用户改了同一行,第二个push的人会报错
解决:
git pull :拉取最新版本,修改再push
第二个修改与第一个提交的同一行。
远程版本库
-
国内gitee比较快,但是这里选择github建立仓库,如果想访问快一点可以同步到gitee
-
ssh-keygen -t rsa -C “GitHun账户邮 箱” :生成ssh文件,一路回车,要确认输入:y
-
将生成的公匙(位于C://users/用户/.ssh/id_rsa.pub) ,复制到新建的仓库(管理->部署公匙->添加部署公匙)
-
本地库创建并绑定远程仓库
echo "# github-java" >> README.md git init git add README.md git commit -m "first commit" #设置提交分支 git branch -M main #设置远程仓库 git remote add origin https://github.com/lwfqw/lwfqw.github.io.git
-
提交远程仓库: git push -u 仓库名(remote 后的 origin)或url 分支
git push -u origin main
标签管理
版本号,常用命令:
新建标签
git tag tagName
新建标签并给信息
git tag -a tagName -m "message"
列出标签
git tag
删除标签
git tag -d tagname
推送指定标签
git push origin tagName
推送所有未推送标签
git push origin --tags
删除远程标签
git push origin :ref/tags/tagName