Git 入门
概述
git —— 分布式版本控制工具,与集中式版本控制工具(SVN、CVS)对应
git 在项目开发中用于团队内的多人协同开发和项目版本控制
Git 基础
注意: 默认已经安装Git并且配置好了环境
Git工作流程
涉及命令:
clone - 克隆
: 从远程仓库(如Gitee、Github)复制代码到本地仓库(如自己的电脑)checkout - 检出
: 从本地仓库检出一个仓库分支然后进行修订add - 添加
: 提交前先将代码提交到暂存区commit - 提交
: 提交代码到本地仓库, 本地仓库中保存有修改的各个历史版本fetch - 抓取
: 从远程仓库抓取到本地仓库, 不能进行任何合并操作pull - 拉取
: 将远程仓库拉取到本地仓库, 自动进行合并(merge),然后将其放回到工作区, 这个操作相当于fetch + mergepush - 推送
: 代码修改完成后,将代码推送到远程仓库, 与团队成员共享代码
Git 基础操作
1、创建本地仓库
在需要推送到远程仓库的目录(项目的本地Git仓库),右键 -> 选择Git Bash进入Git Bash窗口
git init - 初始化
:执行该命令将当前文件夹初始化为一个git仓库,初始化成功后该文件夹下会出现一个.git
子文件夹
可以看到出现了
.git
文件夹
2、Git工作目录下文件的状态
git add [file | .]
: 该指令让文件从工作区进入暂存区,第三个参数可以是指定文件或者.(当前文件夹下全部文件)
git commit -m "content"
: 该指令让文件从暂存区进入本地仓库,需要写入描述内容
可以看到,不论是提交到仓库还是从仓库拉取文件到本地,都要经过暂存区
。
在Git工作目录下对文件的增删改,都存在上面一些状态,这些修改过程中的状态会随着执行git命令而变化
3、常用Git指令
3.1、查看修改的状态(status)
git status
3.2、查看提交日志(log)
git log --[options]
options可选值:
--all
: 显示所有分支--pretty-online
:将提交信息显示为一行abbrev-commit
: 使输出的commitId更简洁graph
: 以图的形式显示
3.3、设置别名
有些时候一些常用指令太长了,为了提高效率,我们使用别名来表示他们
语法:
alias 别名='语句'
- 示例: alias _log = '--pretty=online --all --graph --abbrev-commit'
- 此后options全选时查看日志就可以使用:
git _log
3.4、版本回退
git reset --[options] commitID
, options常用hard
该命令用于将git仓库还原到之前使用某个命令时的版本
git reflog
显示之前所有操作,可以以此获取某一步的commitID,然后使用git reset --hard commitID
指定恢复
3.5、设置git忽略文件列表
让git指令不对指定的文件们起作用,方法是创建一个一个名为.gitignore
的文件,然后vi .gitignore
编辑,写入希望忽略的文件的列表
touch .gitignore
vi .gitignore
-> 进入vi编辑器后,请记得Linux中学习的方法
Git分支
我们进行项目协作开发时,总是有许多分支,其中主线分支master
一般是项目的稳定版是项目的主线,而开发分支develop
是开发版,开发者在开发过程中总是会把项目从开发主线上分离出来进行BUG修改或是调试、开发新的功能,待测试完毕没有问题后再将自己的分支合并到主线分支master
上。
分支在协同开发中有着极其重要的作用
开发中常用分支的说明
master 生产分支
: 线上分支,也是主分支,中小规模项目作为线上运行的应用对应的分支develop 开发分支
: 由master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在这个版本进行开发。可以理解为这个分支上的是测试版本,当在这个分支测试完毕后,需要合并到master分支上线
feature/xxx
: 由develop分支创建的分支,是同期并行开发但不同期上线时创建的分支,分支上的研发任务完成后需要合并到develop分支
hotfix/xxx
: master分支派生的分支,一般作为线上bug修复使用,修复完成后合并到master、develop等分支test
: 代码测试分支pre
: 预上线分支
相关Git指令:
git branch
: 查看本地分支git branch 分支名
: 新建本地分支git checkout 分支名
: 切换分支git checkout -b 分支名
: 如果目标分支不存在,则先创建再切换git merge 分支名
: 将选中的分支上的提交合并到当前的分支git branch -[d/D] 分支名
: 当option为d: 删除分支时需要做各种检查
, 为D: 强制删除分支,不进行任何检查
Git冲突
在两个分支上,如果同时修改了同一文件的同一行,就会出现冲突(merge)
产生冲突的代码块会被<<<<<<< HEAD
和>>>>>>> dev
包裹,如下
<<<<<<< HEAD
此处为产生冲突的代码
>>>>>>> dev
在vscode中,产生冲突的代码的背景会被设置为醒目的黄色
这个时候就需要手动解决冲突,在编译器里可以解决冲突后通过图形化界面提交到仓库,而在Git Bash里,我们一般通过以下顺序解决冲突
- 1、处理文件中有冲突的地方: 指的是在提交的文件中找到产生冲突的代码块,将其修改至不会产生冲突
- 2、冲突解决后将文件提交至暂存区(git add .)、提交到仓库(git commit -m 'content')
合并的快进模式
Git远程仓库
推送本地项目到远程仓库
配置SSH密钥和在Gitee创建仓库的步骤省略,这里只写涉及Git操作的部分
- 先去远程仓库(如gitee)获取远程仓库地址
- 进入你的本地项目根目录,空白处右键打开git bash
// 登录账户
git config --global user.email "xx"
git config --global user.name "xx"
//开始推送
git init //会在本地项目目录生成一个.git文件夹
git remote add origin https://xx/xx/.../git //配置远程仓库名为orgin以及远程仓库地址
git remote //查看当前的远程仓库
git add . //添加文件
git commit -m 'content' //提交文件并设置本次提交的注释
git push -u origin 分支名 //推送添加的文件到远程仓库指定分支
绑定推送
将本地分支与远程仓库的分支绑定,从而可以简化推送步骤
//在第一次推送时:
git push --set-upstream origin 本地分支名1:绑定的远程分支名1
//以后推送时
git checkout 本地分支名1
git push
clone
从远程仓库复制其中的文件到本地,通俗说就是下载
git clone clone的远程仓库地址
抓取和拉取
把远程仓库的更新更新到本地
抓取: git fetch [远程仓库名] [分支名]
: 将仓库里的更新都抓取到本地,不会进行合并。若不指定远程仓库名称和分支名,则抓取所有分支拉取: git pull [远程仓库名] [分支名]
: 将远程仓库的修改拉到本地并自动进行合并,相当于fetch+merge
。若不指定远程仓库名和分支名,则抓取所有并更新当前分支
转载自:https://juejin.cn/post/7224764608040927289