了解版本控制
什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。
什么是分布式版本控制系统分布式版本控制系统( Distributed Version Control System,简称 DVCS )。
在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜 像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份
2Git常用命令
Git系统配置
git config -l
git-global配置
git?config?--global?--list
#?可以设全局公用识别的?邮箱和用户名
git?config?--global?user.name?'xxxxxx'
git?config?--global?user.email?'xxxxx@xxx.com'
项目单独git配置
#?查看
git?config?--list
#?为项目设置单独的user.name和user.email
git?config?user.name?'xxxxxx'
git?config?user.email?'xxxxx@xxx.com'
Git初始化
本地初始化
git?init
远程拉取
git?clone?远程仓库地址
本地仓库与远程仓库的关联
#?本地-建立关联-远程
git?remote?add?origin?远程仓库地址
#?本地-取消关联-远程
git?remote?rm?origin
Git保存和提交
查看状态
git?status
查看所有文件修改详情
git?diff?HEAD
查看指定文件的修改详情
git?diff?HEAD?./README.md
".": 所有修改文件
git?add?.
或
git?add?./home.vue
添加保存说明(提交到本地仓库)
git?commit?-m?'对这次保存添加说明描述'
多人协作开发的时候,提交之前先拉取下代码,解决可能未来的冲突
git?pull?origin?分支名
提交代码
git?push?origin?分支名
Git提交日志
查看提交记录
查看曾经的提交记录 可以显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作
git?log?--pretty=oneline
控制显示条数
git?log?-30?--pretty=oneline
图形化展示查看当前分支的版本演变信息
git?log?--graph
按作者名字查看提交记录
git?log?--author="John"
搜索提交历史,根据关键词
git?log?-S?关键词
按日期
git?log?--after="2023-2-1"
搜索过滤合并提交
git?log?--no-merges?
or?
git?log?--merges
按提交信息
比如说,你的团队规范要求在提交信息中包括相关的issue编号,你可以用下面这个命令来显示这个 issue 相关的所有提交
git?log?--grep="JRA-224:"
查看当前 版本标志位
git reflog是Git操作的一道安全保障,它能够记录几乎所有本地仓库的改变,包括所有分支的commit提交,以及已经被删除的commit
git?reflog
Git回退到某个版本
回退到上一个版本
git?reset?--hard?HEAD^?#?回退上一个版本
git?reset?--hard?HEAD~3??#?回退上上上一个版本?
git?reset?--hard?bae128??#?回退到某个版本回退点之前的所有信息。?
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推...
Git分支指令
查看素有分支
git?branch?-a
切换分支
git?checkout?分支名
创建本地分支
git?branch?新分支名
#?创建并切换到新分支
git?checkout?-b?新分支名
根据指定版本号创建分支
git?checkout?-b?分支名?提交ID
推送本地分支到远程仓库
git?push?origin?新分支名
这是一个“安全”操作,因为 Git 会阻止我们删除具有未合并更改的分支
git?branch?-d?分支名
即使它有未合并的更改。如果想永久丢弃与特定开发线相关的所有提交,则可以使用此命令
git?branch?-D?分支名
git?push?origin?--delelte?分支名
查看仓库源名称
git?remote?-v
git?remote?update?origin(仓库源名称)?--prune
git?push?origin(仓库源名称)?--all
git?push?origin(仓库源名称)?--force
想将develop分支合并到master分支
git?checkout?master?#?首先切换到master分支上
git?pull?origin?master?#?如果是多人开发的话?需要把远程master上的代码pull下来
git?merge?--no-ff?develop?#?然后我们把develop分支的代码合并到master上
关于 git merge develop 和 git merge --no-ff develop 的区别
git?merge?develop
====?>??结果就会变成
??????????A---B---C?develop
?????????/?????????master
D---E---F?
执行此句话后,因为 develop 就在 master 的下游,所以直接移动了 master 的指针,master 和 develop 都指向了 C
而如果执行了 git merge --no-ff feature 的话,是下面的结果:
git?merge?--no-ff?develop
====?>??结果就会变成
??????????A---B---C?develop
?????????/?????????\
D---E---F-----------G?master
由于?--no-ff 禁止了快进,所以会生成一个新的提交,master 指向 G。
从合并后的代码来看,结果其实是一样的,区别就在于 --no-ff 会让 Git 生成一个新的提交对象, 通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,而 feature 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史
git?tag?-l
git?tag?-a?标签名?-m?'版本说明'
git?show?标签名
git?tag?-D?标签名
or
git?tag?-d?标签名
git?push?origin?标签名
git?push?origin?--delete?标签名
cmd中使用log命令,不会自动退出,需要手动按下英文状态下的q退出
(按 i 进行编辑,编辑后,按 ESC,如果保存退出使用 :wq,只退出输入 :q,如果出错,退出不保存使用 :qa!)
git?commit?--amend?#该命令将打开编辑器,并允许更改最后一次提交消息
git?log
git?reset?e102c05227bca7517554777f589f130305b69427?#保留提交之前的更改到工作区
git?log?vue.config.js?#拿到文件提交记录ID
git?checkout?e102c05227bca7517554777f589f130305b69427(commitID)?vue.config.js??#将文件还原到你想要还原的版本
只要所有开发者都遵守这个规则,那么解决冲突是一件非常容易的事情
例如我的分支叫做dev分支。我把代码修改完成了,现在不知道有没有冲突。
在 dev 分支里面,执行命令git merge origin/master
,把远程的master分支合并到当前dev分支中。如果没有任何报错,那么直接转到第5步。
如果有冲突,根据提示,把冲突解决,保存文件。然后执行命令git add xxx把你修改的文件添加到缓存区。然后执行命令git commit -m "xxx"
添加 commit 信息。
执行如下命令,切换到 master 分支:git checkout master
。
执行命令git pull确保当前 master 分支是最新代码。
把dev分支的代码合并回 master 分支:git merge dev
。
提交代码:git push。