1.1Git 的优势 分支操作
- 大部分操作在本地完成,不需要联网
 - 完整性保证
 - 尽可能添加数据而不是删除或修改数据
 - 分支操作非常快捷流畅
 - 与 Linux 命令全面兼容
 
1.2Git流程

1.3命令行操作
1.3.1本地库(版本库或仓库)初始化
命令:
git init (git add  //使用git管理这个文件  放入暂存区)
 
效果 $ls -lA (查看以.开始的隐藏文件)
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡
 乱修改。
1.3.2设置签名
命令 :
**项目级别/仓库级别:**仅在当前本地库范围内有效
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 
 
多屏显示控制方式:
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 步
 
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 常用于查阅正在改变的日志文件。
 

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 解决冲突
-  
冲突的表现
 -  
冲突的解决
- 第一步:编辑文件,删除特殊符号
 - 第二步:把文件修改到满意的程度,保存退出
 - 第三步:
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










