git 的学习以及使用

基本概念

什么是版本控制系统?
版本控制是用某种方法来保存某一时刻的文件版本的系统。

版本控制工具的分类?
一般分为集中式(代表为SVN)和分布式(git)。
集中式特点为只有一个远程中央仓库来存放所有版本数据,万一远程仓库挂了所有人都不能使用仓库了。
分布式特点为包括远程仓库的所有人都会保存一份所有版本的数据,在每个人的计算机上的仓库叫本地仓库,远程仓库挂了本地仓库也可以工作。(那么问题来了,怎样保证每一个仓库的同步呢?)

git是什么?
git是分布式版本控制工具。
git有一个充当中央管理器的地方,客户端并不只提取中央管理器最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。

git与SVN的主要区别?
git使用直接记录快照方式进行代码存放,而其他的工具多数使用差异比较的方式

记录快照:对每一个版本都进行存储,并记录指向文件的指针,读取版本时寻找对应版本指针即可
差异比较:记录初始文件,之后的修改进行增量记录,读取对应版本时必须从最开始读,一条一条向后修改

通用 ssh 拉取代码

https://blog.csdn.net/qq_38232816/article/details/112822309

git 的区域与状态

工作区:可以在工作区写代码,对应已修改状态
暂存区:临时存放代码的地方,对应已暂存状态
本地库:在git仓库中产生对应的历史版本,对应已提交状态
远程库:代码托管中心,基于网络服务器远程代码仓库

分支开发

也是之前那个问题的答案(怎样保证每一个仓库的同步)

git最大的特点是分支开发,将远程仓库中的主代码copy下来,如果要修改代码或者写代码,就切换分支或者创建分支,在该分支中进行业务开发,如果要将代码提交,可以提交到仓库的对应分支中,或者进行分支合并再提交

一般来说,先在自己的分支上开发,然后切换到主分支拉取远程代码,并且合并分支

切换分支时,IDEA当在一个分支上修改了内容没有提交,然后切换到其他分支时,这时IDEA会弹出提示,问你要选择Smart Checkout还是Force Checkout:

如果想保留你在原分支上的修改内容,那么选择Smart Checkout;而 Force Checkout不会保留你的修改,切到另一个分支内容就消失了,且切回来原来分支也找不回

而 merge into curren 的作用是将所选分支合并到当前分支

代码回滚

git reset 命令用于回滚代码到某次提交之前,该命令是用来回退版本的,git reset 三种模式分别为 : mixed(默认)、soft、hard

–hard : 回退版本库,暂存区,工作区到指定 commit。因此我们修改过的任何代码就没了

–mixed: 回退版本库,暂存区。–mixed为git reset的默认参数,即当任何参数都不加的时候的参数。此时工作区的代码不受影响,但是你可能观察到有些类变红了或者变蓝了,这就是工作区的代码与版本库代码不一致导致的

–soft: 只回退版本库

git 还提供了一个代码回滚命令:git revert。该命令用于反做。使用 reset 命令,Git 会把要回退版本之后提交的修改都删除掉。要从第四次修改回退到第一次修改,那么会删除第二、三、四次的修改

那如果发现第三次修改有错误,想要恢复第三次修改,却要保留第四次修改呢?这个时候就可以用 revert 命令:

git revert -n 97ea0f9
git commit -m "恢复第三次修改"

-- 回滚到8个版本之前
git revert HEAD~8..HEAD

-- m 1表示保留当前分支的更改,m2 表示保留另外一个分支的修改
git revert -n 97ea0f9 -m 1

git 的提交历史为

33b8b30 (HEAD -> master) Revert "恢复第三次修改"
42eae13 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改

注意,git revert 可以回滚多次提交的代码。每次使用 git revert 命令可以撤销指定的提交,如果需要撤销多次提交,则需要多次执行 git revert 命令。每次执行 git revert 命令都会生成一个新的提交,用于撤销之前的提交

在实际生产环境中,代码是基于 master 分支发布到线上的,会有多人进行提交。可能会碰到自己或团队其他成员开发的某个功能在上线之后有 Bug 需要及时做代码回滚的操作

在确认要回滚的版本之后,如果别人没有最新提交,那么就可以直接用 reset 命令进行版本回退,否则,就可以考虑使用 revert 命令进行还原修改,不能影响到别人的提交

使用 reset 还是 revert,需要考虑实际的适用场景,没有绝对化

常用的命令

head表示指针,使用HEAD可以代表当前分支
HEAD
代表上一个版本
HEAD~
一般开发流程
将远程仓库clone到本地,创建新分支(master不一定有权限),add、commit、push,在发布时会将dev分支合并到master分支并且发布master分支。如果提交不了可能是远程仓库有更新或者dev分支与mas分支有冲突,拉取之后用marge合并即可

如何开始

在当前文件夹下初始化本地库
git init
克隆一个已存在的远程仓库,git clone -b dev 加远程链接会拉取一个指定分支并关联
git clone
管理远程仓库相关操作,关联仓库使用add,获取更多帮助使用--help
git remote
拉取远程分支并创建本地同名分支
git checkout -b 本地分支名x origin/远程分支名x
查看本地库以及代码状态
git status
查看历史版本,只记录已经提交的版本
git log
查看历史版本,记录该分支下所有操作
git reflog

添加文件到暂存区
git add
比较文件的不同,默认比较工作区与暂存区的不同,后加cached或者staged可比较暂存区与本地仓库的不同,也可以比较不同分支的差异
git diff
提交本地库,一般使用-am,因为该命令提交已追踪的文件,比较方便
git commit -m "日志信息" 文件名
远程仓库推送,一般来说,要先进行创建分支或者分支合并操作,如果远程分支与本地分支名字相同,可省略冒号以及后面内容
git push <远程主机名> <本地分支名>:<远程分支名>

从远程仓库拉取代码相关
从远程仓库拉取代码,用该命令拉取分支会放到origin:dev中,就算已经处于dev分支也需要进行代码合并
git fetch 
分支合并操作,可以后跟两个分支将两个分支合并,也可以后加一个分支将目前分支与该分支合并;merge也可以用来处理冲突
git merge
拉取代码并且合并操作,相当与执行了上面两个代码
git pull

该命令用来管理分支,默认执行查看所有分支,后加一个分支名用来新建分支,后加-d可用来删除分支
git branch
该命令用来切换分支,默认执行后跟分支名可切换分支,后加-b加分支名新建分支并且切换分支
git checkout
创建一个新分支并且切换过去,后面的origin是一个远程仓库名,/dev指的是仓库下的某个分支名,接着将新建的这个分支与远程的dev分支联系起来
git checkout -b dev origin/dev

重置代码到之前的版本,其中默认为--mixed,还有--hard以及--soft
git reset
撤销已经存在的提交
git revert
将一个分支与另一个分支线性合并
git rebase

删除暂存区文件
git rm --catched 文件名

如果出现了一些奇怪的提示,使用这个
git pull test master --allow-unrelated-histories

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值