Git
概念:
是一个免费的、开源的分布式 版本控制
系统。可以快速
版本控制:
一种记录一个或若干文化内容变化,以便将来查阅特定版本修订情况的系统
好处:
可以将某个文件【甚至整个项目】回溯到之前的状态
可以比较文件的变化细节,并且可查看最后谁进行修改。
版本控制的分类:
集中化的版本控制系统 [SVN]
通过一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到该服务器,取出最新的文件或者提交更新。
缺点:中央服务器的单点故障。
分布式的版本控制系统[GIT]
并不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来。因此该系统可以指定和若干不同的远端代码仓库进行交互。因此同一项目中分别和不同工作小组的人相互协作。
Git结构
本地结构
本地库和远程库地交互方式:
团队内部协作
跨团队写作
因此需要 通过 代码托管中心
来维护远程库
托管中心种类:
局域网环境:可以搭建 GitLab服务器作为代码托管中心
外网环境下:可以由GitHub或者Gitee作为代码托管中心
初始化本地仓库
【在Git中 命令与 Linux
是一致的】
查看Git版本
git --version
设置签名
设置用户名 与 邮箱
git config --global user.name "xxx"
git config --global user.email "xxx"
[“xxx”:xxx处填写设置的内容]
本地仓库的初始化操作
git init
常用命令
add命令
主要将本地库的文件提交到暂存区
命令行:
git add 文件名.后缀
eg:
1.首先 创建一个 想要提交的文件
gitFile.txt
2.使用 add命令 将暂存区的内容交到本地库
git add gitFile.txt
commit命令
主要将暂存区的内容交到本地库
命令行:
git commit -m "备注信息" 文件名.后缀
将add命令中的文件提交至本地库
git commit -m "demo实例提交" gitFile.txt
不放在本地仓库的文件,Git是不对其进行管理。
即使在本地仓库的文件,Git依旧不对其进行管理。
只有通过add,commit命令操作才能将内容提交至本地库。
status命令
主要用于查看工作区和暂存区的状态
命令行:
git status
eg:
创建一个文件并提交
git add "gitStatus.txt"
此时 git status
将会查看到
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: gitStatus.txt
通过git commit
之后,再对文件进行修改
git commit -m "status示例" gitStatus.txt
//修改gitStatus.txt内容 ...
此时 git status
将会查看到
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: gitStatus.txt
log命令
主要查看历史记录
命令行
git log
显示效果
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [commit 索引]
Author: xxx <xx@xx.com> [上传人 邮箱]
Data: xx xx DD HH:MM:SS +xx [时间]
其中当有多条数据时,会进行分页。
分页的标识 显示:
下一页:按一次空格键
上一页:b
结束:显示END
退出:q
其他形式展开日志
1.git log 前文的方式 由分页效果
2.git log --pretty=oneline
展现的结果
索引 + 备注
3.git log --oneline
展现的结果
索引前几个字段 + 备注
4.git reflog
展现的结果
索引前几个字段 +HEAD@{number} commit: 备注
其中 number 表示:指针当当前历史版本需要多少步
reset命令
用于前进或者回退到某一个版本
命令行
git reset --参数 索引
效果:
将版本操作到与索引版本一致
参数
1.hard参数
命令行
git reset --hard 索引
主要效果:
在本地库指针移动的同时,将暂存区、工作区重置
2.mixed参数
命令行
git reset --mixed 索引
主要效果:
在本地库指针移动的同时,将暂存区重置。但工作区保持不变。
3.soft参数
命令行
git reset --hard 索引
主要效果:
仅移动本地库。暂存区、工作区都不变
eg:
在操作时误操作 删除了某个文件。
找回删除的文件,实际就是把
历史版本切换到最近有那个文件的版本
。
git reset --hard 有该文件的版本索引
diff命令
可以将工作区与暂存区的文件进行对比。
git diff 文件名
1.提交一个文件(diffFile.txt)到本地库。
2.在工作区中修改该文件的内容
3.此时便可以输入
git diff diffFile.txt
结果为:
diff --git a/diffFile.txt b/diffFile.txt
index xxx..xxx 23123
--- a/diffFile.txt
+++ b/diffFile.txt
@@ -1 +1 @@
-1111 [此处 - 为删除 上面-1是减少一行]
\ No newline at end of file
+2222 [此处 + 为添加 上面+1是加少一行]
\ No newline at end of file
多个文件的对比
git diff
Git分支
什么是分支:
在版本控制过程中,使用多条线同时推进多个任务。这里面说的是多条线,就是多个分支。
分支的好处:
可以允许多个分支可以并行开发,互相不影响,提高开发效率。
如果有一个分支功能开发失败,直接删除即可,不影响整体进度。
常见Git分支操作
查看分支
git branch -v
创建分支
git branch 新分支名
切换分支
git checkout 分支名
合并分支
git merge 分支名
冲突问题
背景:
1.branch_1 分支中 textFile.txt的内容被修改
2.branch_2 分支中 同样对该文件进行修改
3.在branch_1分支中想要合并branch_2分支中
【在大分支(branch_1)将合并分支(branch_2),首先要在大分支环境中】
git merge branch_2
此时会出现冲突
Auto-merging textFile.txt
CONFLICT(content):Merge conflict in textFile.txt [表明该处出现冲突]
Automatic merge failed;fix conflicts and then commit the result.
.... (branch_1 |MERGING) [表明正在处于合并状态]
何时会出现冲突问题?
都在用一个文件中同一个位置进行修改。
解决冲突方法
1.商议适合需求的决策,保留所需的代码。
2.将处理后的文件添加到暂存区中。add
3.此时要进行commit
操作。但需要注意的是不要带上文件
,否则会报错。
git commit -m "merge files"
4.此时就可以查看到 该分支状态不处于合并状态。
GitHub的相关操作
官网注册:GitHub
创建远程库
1.在本地 将一个项目进行git init
2.进入Github 的 ➕ 的 New repsitory
创建好后进入该远程库
HTTPS
和 SSH
。 主要作用是获取该远程仓库地址的方式
由于地址较长,每一次操作起来都不太高效。
因此有
别名
来提高效率。
起别名的命令:
git remote add 别名 地址
常见操作
克隆操作
git clone 远程库地址
当进行克隆操作时,还会完成
1.初始化本地库
2.将远程库的内容复刻到本地
3.替我们创造远程库的别名
push 推送操作
git push 远程库的别名 推送的分支
eg:
git push repostion master
将本地master分支的内容提交的远程库的master分支(如果远程仓库没有mater分支,则会默认添加)
通常操作
1.更新本地库 add commit
2.push到远程库
git push 远程库 分支
pull操作
pull 约等于 fetch +merge
来完成远程库的拉取
git pull 远程库别名 远程库对应分支
1.抓取远程库
git fetch 远程库别名 远程库对应分支
执行抓取操作后,仅仅只是将远程库的内容下载至本地。工作区的文件仍是原来的内容。
2.此时可以在远程库查看内容是否正确
git checkout 远程库别名/远程库对应分支
ll
3.确定内容正确后,便可以进行合并操作。但需要将分支切换到本地分支上
进行合并
git merge 远程库别名/远程库对应分支
以上的操作都可以直接通过pull操作完成
协同开发合作时冲突的解决方法
1.角色:[Tom]
向远程库推送文件add commit push
2.角色:[Jerry]
进行一个pull
操作,并修改了里面的文件。再次进行 推送
3.角色:[Tom]
恰好与Jerry一样,对同一个文件进行操作,并且推送。
【此时则会出现冲突】
解决冲突的方法:
1.先拉取远程库文件
git pull 远程库别名 远程库对应分支
2.修改冲突
人为的进行删改
3.推送至远程库
git add 文件名
git commit -m "发生冲突问题时,切记不要带文件名"