Git笔记
一、版本管理介绍(听一嘴)
老版本修改的缺点
1、操作麻烦 2、命名不规范 3、容易丢失 4、协作困难
版本控制软件
好处:操作简单、易于对比、易于回溯、不易丢失、操作方便。
版本控制系统的分类
1、本地版本控制系统
特点:
使用软件来记录文件的不同版本(简单数据库记录历次差异),提高了工作效率,降低了手动维护版本的出错率。
缺点:
① 单机运行,不支持多人协作开发
② 版本数据库故障后,所有历史更新记录会丢失
2、集中化的版本控制系统 (SVN)
特点:
基于服务器、客户端的运行模式
① 服务器保存文件的所有更新记录
② 客户端只保留最新的文件版本
优点:联网运行,支持多人协作开发
缺点:
① 不支持离线提交版本更新
② 中心服务器崩溃后,所有人无法正常工作
③ 版本数据库故障后,所有历史更新记录会丢失
分布式版本控制系统(Git)
特点:
基于服务器、客户端的运行模式
① 服务器保存文件的所有更新版本
② 客户端是服务器的完整备份,并不是只保留文件的最新版本
优点:
① 联网运行,支持多人协作开发
② 客户端断网后支持离线本地提交版本更新
③ 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复
二、Git基础概念
将当前目录转换为Git仓库 git init
清屏命令 clear
1、Git
中的三个区域(记住)
使用 Git
管理的项目,拥有三个区域,分别是工作区、暂存区、Git
仓库(版本库)
2、Git
中的三种状态(记住)
-
已修改
modified
-
表示修改了文件,但还没将修改的结果放到暂存区
-
-
已暂存
staged
-
表示对已修改文件的当前版本做了标记,使之包含在下次提交的列表中
-
-
已提交
committed
-
表示文件已经安全地保存在本地的 Git 仓库中
-
3、工作区中文件的 4 种状态
Git分为未跟踪和已跟踪
已跟踪包括:未修改,已修改,已暂存
新创建的文件,还未被纳入管理,所以处于未被跟踪状态。
Git 操作的终极结果:让工作区中的文件都处于“未修改”的状态。
工作流程:
1、创建文件(未跟踪状态)
2、已暂存 (添加到暂存区)
3、提交到git仓库
4、未修改 (工作区)
5、已修改
检查文件状态
1、git status
命令输出状态的详细报告
git status -s(--short) 精简方式显示状态
2、git add
开始跟踪一个文件
git add index.html # 将多个文件添加到暂存区 git add 文件1 文件2 文件3..... 或者 git add .
3、git commit -m 将文件提交到git仓库,形成版本记录。
跳过使用暂存区域
git commit -a -m "日志信息"
注意:只有已跟踪的已修改文件可以跳过,未跟踪的不可以。
三、忽略文件
根目录创建一个名为 .gitignore
的配置文件,列出要忽略的文件的匹配模式。
使用到时问度娘
四、反悔操作
1、撤销对文件的修改
撤销对文件的修改指的是:把对工作区中对应文件的修改,还原成 Git 仓库中所保存的版本。
git checkout -- index.html
撤销操作的本质:用 Git 仓库中保存的文件,覆盖工作区中指定的文件。
2、取消暂存的文件
如果需要从暂存区中移除对应的文件,可以使用如下的命令:
git reset HEAD 要移出的文件名称 或者 git reset 文件名称 git reset HEAD . 移出多个
3、移除文件
从 Git 仓库中移除文件的方式有两种:
① 从 Git 仓库和工作区中同时移除对应的文件
② 只从 Git 仓库中移除指定的文件,但保留工作区中对应的文件
# 从 Git仓库和工作区中同时移除 index.js 文件 git rm -f index.js # 只从 Git 仓库中移除 index.css,但保留工作区中的 index.css 文件 git rm --cached index.css
==注意:删除操作执行完,需要再做一次commit提交。==
4、回退版本
第1步,查看提交历史
# 显示所有版本 git reflog
第2步,回退到指定的版本
#切换到指定版本 git reset --hard 指定版本ID
DAY2
建立连接的命令:
git remote add <shortname> <url> # shortname 给远程仓库起一个别名,通常是origin # url 远程仓库的地址
将本地仓库的内容推送到远程仓库:
# 第一次推送 git push -u origin master # 第二次及后续推送 git push
生成 SSH key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" #连续敲击三次回车
测 Github
的 SSH key
是否配置成功
ssh -T git@github.com 或者 ssh -T git@gitee.com
后续跟https的步骤一致
将远程仓库的最新代码拉取到本地
git pull
步骤:
1、先做好本地仓库,并操作完成
2、创建一个空的远程仓库
(3)、SSH需要配置密钥,Https不需要配置环境。
3、让本地仓库与远程仓库建立关联
4、将本地仓库的内容推送到远程仓库
将远程仓库的文件克隆到本地
git clone 远程仓库的地址
Git
本地分支
分支又分为主分支和功能分支
主分支只有一个master,功能分支有多个,它是临时从 master
主分支上分叉出来的,完毕后,最终需要合并到 master
主分支上。
查看分支列表
git branch
创建新分支
git branch 分支名称 #基于当前分支,创建一个新分支
切换分支
git checkout login
创建并切换分支
# -b 表示创建一个新分支 # checkout 表示切换到刚才新建的分支上 git checkout -b 分支名称
合并分支
# 1. 切换到 master 分支 git checkout master # 2. 在master 分支上运行 git merge 命令,将 login 分支的代码合班到 master 分支 git merge login
删除分支
git branch -d 分支名称 没有执行过合并操作的分支,使用 git branch -D 分支名称,进行删除
制造冲突以及解决冲突
1、在功能分支上对index.html文件进行修改,修改完毕后提交到仓库
2、在master分支上对index.html进行修改,修改完毕后提交到仓库
3、合并分支到主分支上产生了冲突
4、手动解决,确定哪些需要保留
5、解决冲突后重新做一次提交
将本地分支推送到远程仓库
# -u 表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带 -u 参数 git push -u 远程仓库的别名 本地分支名称:远程分支名称 # 实际案例 git push -u origin payment:pay # 如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化 git push -u origin payment
查看远程仓库中所有的分支列表
git remote show 远程仓库名称 # 示例 git remote show origin
跟踪(下载)分支
#从远程仓库中,把远程分支下载到本地仓库,分支名称保持一致 git checkout 远程仓库的分支 # 示例 git checkout pay # 从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名 git checkout -b 本地分支名称 origin/远程分支名称 # 示例 git checkout -b payment origin/pay
拉取远程分支的最新的代码
# 从远程仓库,拉取当前分支最新的代码,保持当前分支的代码和远程分支代码一致 git pull
删除远程分支
# 删除远程仓库中,制定名称的远程分支 git push 远程仓库名称 --delete 远程分支名称 # 示例 git push origin --delete pay
多人协作问题(推送失败)
推送失败原因:
多人协作开发,当代码书写完毕,发现代码推送不上去,是因为别人先提交了文件,导致远程仓库中的版本与本地仓库的版本不一致。
解决办法:先拉后推
多人协作问题(拉取冲突)
原因:远程仓库记录的文件内容与本地仓库记录的文件内容不一致,而拉取远程代码到本地,会进行自动合并操作,此时,git并不知道保留哪个,删除哪个,会导致冲突。
解决方法:先手动解决冲突,在拉取