1.1Git 的优势 分支操作
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与 Linux 命令全面兼容
1.2Git流程
1.3命令行操作
1.3.1本地库(版本库或仓库)初始化
命令:
git init (git add //使用git管理这个文件 放入暂存区)
效果 $ls -lA (查看以.开始的隐藏文件)
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡
乱修改。
1.3.2设置签名
用户名:tom Email
地址:goodMorning@qq.com
作用:区分不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关 系。
命令 :
**项目级别/仓库级别:**仅在当前本地库范围内有效
git config user.name 用户名
git config user.email 邮箱
- 信息保存位置:./.git/config 文件
**系统用户级别:**登录当前操作系统的用户范围
git config *--global* user.name tom_glb
git config *--global* user.email goodMorning_pro@atguigu.com
- 信息保存位置:~/.gitconfig 文件
级别优先级
-
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
-
如果只有系统用户级别的签名,就以系统用户级别的签名为准
-
二者都没有不允
$ ls -lA |less //less 查看文件后按:q返回
1.3.2Git基本操作
1.3.2.1 状态查看 status
git status # 查看工作区、暂存区状态
1.3.2.2 添加 add
git add [file name] # 将工作区的“新建/修改”添加到暂存区
git add . # 提交所未定位的文件。
git rm --cached [file name] # 将文件从暂存区撤回
1.3.2.3 提交 commit
git commit [file1] [file2] ... -m [message] # 将暂存区的内容提交到本地库 message备注信息
git commit -a -m [message] # 不经过add 直接添加至本地库
可以直接commit,在不add的情况下
1.3.2.4 查看历史记录 log
git log
多屏显示控制方式:
空格向下翻页
b 向上翻页
q 退出
git log --pretty=oneline //一个任务一行显示
git log --oneline //缩短hash值
git reflog //显示移动步数
HEAD@{移动到当前版本需要多少步} //head 指针
1.3.2.5 前进后退 reset --hard
-
基于索引值操作[推荐]
git reset --hard [局部索引值] git reset --hard a6ace91
-
使用^符号:只能后退
git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退 n 步
-
使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退 n 步
当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
1.3.2.6 reset 命令的三个参数对比
-
–soft 参数
-
仅仅在本地库(仓库)移动 HEAD 指针
注:本地库若后退了,会让暂存区与工作区显得往前走了
-
-
–mixed 参数
- 在本地库移动 HEAD 指针
- 重置暂存区
-
–hard 参数
- 在本地库移动 HEAD 指针
- 重置暂存区
- 重置工作区(云上)
1.3.2.7 删除文件并找回 reset前一个版本
- 前提:删除前,文件存在时的状态提交到了本地库。
- 操作:git reset --hard [指针位置] 回退版本
- 删除操作已经提交到本地库:指针位置指向历史记录
- 删除操作尚未提交到本地库:指针位置使用 HEAD
1.3.2.8 比较文件差异
-
git diff [文件名]
- 将工作区中的文件和暂存区进行比较
-
git diff [本地库中历史版本] [文件名]
- 将工作区中的文件和本地库历史记录比较
-
不带文件名比较多个文件
名词解释
名词解释:
CRLF: "\r\n", windows系统环境下的换行方式
LF: "\n", Linux系统环境下的换行方式
Linux语法
ctrl+l 清屏 clear
linux语法
$ cat good.txt # 查看文本内容
$ vim good.txt # 编辑文件 i插入 ESC wq保存退出
$ pwd(英文全拼:print work directory) # 显示目前的目录
$ mkdir(英文全拼:make directory) # 创建一个新的目录
$ rmdir(英文全拼:remove directory) # 删除一个空的目录
$ cp(英文全拼:copy file) # 复制文件或目录
$ rm(英文全拼:remove) # 删除文件或目录
$ mv(英文全拼:move file) # 移动文件与目录,或修改文件与目录的名称
$ tail -n 100 [/etc/cron 文件路径 ] # 显示最后100行数据 -f 常用于查阅正在改变的日志文件。
创建文件或文件夹的方式
touch # 用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
vi # vi编辑器 编辑文件,没有会自动创建
mkdir # 创建目录,没有会自动创建使用vim时,如果不小心按了 Ctrl + s后,会发现不能输入任何东西了,像死掉了一般,其实vim并没有死掉,这时vim只是停止向终端输出而已,要想退出这种状态,只需按Ctrl + q 即可恢复正常。
1.4分支管理
1.4.1 分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任 何影响。失败的分支删除重新开始即可
- 一般工作至少需要两个分支 master(主分支)、dev(开发分支)
1.4.2分支操作
1.4.2.1创建、删除分支命令:branch
分支创建新分支时,新创建的分支代码与创建者的分支代码保持一至。
git branch (分支名) # 创建分支
git branch # 查看分支
git branch -d 需要删除的分支名 # 查看分支
1.4.2.2切换分支命令:checkout
git checkout (分支名)
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
1.4.2.3合并分支命令:merge
若A分支合并B分支:需要先切换到A分支,然后在A分支下合并B分支。
git merge (有新内容分支)
1.4.2.3 解决冲突
-
冲突的表现
CONFLICT (content): Merge conflict in good.txt
Automatic merge failed; fix conflicts and then commit the result.提示产生冲突,需要解决。
**产生冲突的原因:**merge 分支的代码与原分支的代码修改过同一行的文件。(未修改同一行文件一般会自动合并)
-
冲突的解决
- 第一步:编辑文件,删除特殊符号
- 第二步:把文件修改到满意的程度,保存退出
- 第三步:
git add [文件名]
- 第四步:
git commit -m "日志信息"
- 注意:此时 commit 一定不能带具体文件名,因为此时需要commit多个文件所以不加文件名。
1.5连接GitHub
1.5.1创建远程仓库的别名 remote add
git remote -v 查看当前所有远程地址别名
git remote add [别名] [远程地址]
1.5.2 推送本地库(版本库)到远程仓库 push
git push [别名] [分支名]
1.5.3 克隆 clone
git clone [远程地址]
1.5.4 拉取 pull
git pull 命令用于从远程获取代码并合并本地的版本。用于冲突不是很多的情况,否则用fetch后merge
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。 命令格式如下:
git fetch [远程库地址别名] [远程分支名] #从远程获取代码库
git merge [远程库地址别名/远程分支名]
git pull <远程主机名> <远程分支名>:<本地分支名>
$git pull origin master --allow-unrelated-histories # 强制合并 git库里有多个分支目前只想修改一个分支的内容
1.5.5 团队其他人推送
如果不是基于 GitHub 远程库最新版所做的修改,不能直接推送(push),必须先拉取(pull)。拉取下来后进入冲突状态,解决冲突完成之后推送(push)。
1.5.6 跨团队协作
1.fork
在github的项目界面右上角
2.clone 跨团队fork后拥有的远程库
3.改动后pull 跨团队的远程库
4.在GitHub上的项目界面点 Pull request >>> New pull request >>> 写消息Create pull request
5.项目所有人查看跨团队的 Pull request
6.审核代码
7.合并代码 Merge pull request
8.将远程库拉取到本地 pull
1.6ssh连接Git
略
1.7Eclipse连接Git
1.7.1 查看Git 设置本地库的用户签名
window >> preferences >> Team >> Git >> Configuration(Repository Settings选项卡) >> Add Entry
1.7.2 解释 合并工具zoomit
- 创建好eclipse的本地库之后 需要git add 添加到缓存区将文件追踪。如果文件未被追踪文件无法上传到仓库。
- 项目中的所有文件不需要全部都进行追踪,有一些用于项目管理的文件不需要上传。
- Navigator窗口可查看项目的所有文件
- 项目右键 >> Team >> Add to index(添加至仓库缓存)
- commit 需要填写提交信息,一般是介绍操作的用途,或修改的文件名
- 转换工程类型:项目右键 >> Configure >> Convert to Maven Project
- 低版本导入git项目需要指定工作区以外的项目,高版本一般指定工作目录。
- 在做修改之后需要提交到本地库(commit)才能往git上提交,一般需要先pull 后 Push 。
- 冲突合并的工具:merge tool 左边是自己的,右边是git上的,左边可以修改,右边不可以修改。
1.8Git的工作流
1.8.1 分类
-
集中式工作流
像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有 修改都提交到 Master 这个分支上。 这种方式与 SVN 的主要区别就是开发人员有本地库。Git 很多特性并没有用到。
-
Gitflow工作流
Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布 迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
-
Forking 工作流
Forking 工作流是在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的 功能以达到代码审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受 不信任贡献者的提交。
1.8.2 GitFlow工作流详解
1.8.2.1分支的种类
-
主干分支 master
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境 完全一致。
-
开发分支 develop
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
-
bug 修理分支 hotfix
主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修 理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
-
准生产分支(预发布分支) release
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集 成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后 可以视情况删除。
-
功能分支 feature
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支 中独立出来。 开发完成后会合并到开发分
1.8.2.2GitFlow工作流举例
操作:
切换分支:Team >> switch to >>
合并分支:Merge
- 创建分支 new Branch
- 切换分支审查代码 ,并从commit代码到Git库
- 项目经理 检出远程分支 checkout (项目经理本地创建出新的分支(前面新建的))
- 切回master
- 合并分支 merge
- 合并成功后推向Git
1.9 Gitee实战
见:https://blog.csdn.net/qq_43530326/article/details/123435355