文章目录
为什么要使用git
传统文档管理
- 我们在写毕业论文时可能会遇到多次修改之后的论文命名方式:
- 论文_改.doc、论文_改改.doc、论文_改改改.doc、论文_改改改改.doc、论文_改改改改再改.doc、
论文_改改改改再改TM不改了.doc
- 论文_改.doc、论文_改改.doc、论文_改改改.doc、论文_改改改改.doc、论文_改改改改再改.doc、
源代码管理的好处
- 方便多人协同开发
- 方便版本控制
git的诞生
- 作者 Linux之父:Linux Torvalds
- git 开发目的:为了辅助 Linux 内核开发
- 是 Linux Torvalds 在无奈被逼的情况下创造的
- 2008年,github 网站上线,为开源项目免费提供 git 存储,无数开源项目开始迁移至github
- git 迅速成为最流行的分布式版本控制系统(没有之一)
git结构
结构分析
- git 是分布式管理系统,服务器和客户端都有版本控制能力,都能进行代码的提交、合并……
- 结构图1
- 结构图2
本地代码管理
- 工作区(workspace):添加、修改、删除文件
- 暂存区(index):将工作区中的操作完成小阶段的存储,是版本库的一部分
- 本地仓库区(respository):对个人开发的一个小阶段代码存储
- 记录的各版本可以查看或者回退
- 但是在暂存区的版本一旦提交就再也没有了(保存到仓库区中)
本地仓库操作
安装git
#在Linux安装
sudo apt-get install git
查看是否安装成功
git --version
创建项目
- 创建一个项目文件夹用于演示(MyProjects)
- 新建本地仓库
cd ~/MyProjects/
#初始化,使其变成 git 的仓库
git init
#会创建一个 .git 隐藏文件
3. 配置个人信息
#全局配置个人信息
git config --global user.name 'xiaogeldx'
git config --global user.email 'xxx@qq.com'
#针对本项目的个人配置信息
git config user.name 'xiaogeldx'
git config user.email 'xxx@qq.com'
#配置信息出现在 .git/config 文件中
4. 新建测试文件
vim test01.py
5. 查看文件状态
git status #当前在工作区
6. 将工作区添加到暂存区
#添加项目中所有文件
git add .
#或者添加指定文件
git add test01.py
7. 将暂存区文件提交到仓库区
git commit -m '一些描述'
8. 查看历史版本
git log
git reflog
#git reflog 可以查看所有分支的所有操作记录(包括 commit 和 reset 的操作),包括已经被删除的 commit 记录,git log 不能查看已经删除了的 commit 记录
回退版本
- 方法一:
- HEAD 表示当前最新版本
- HEAD^ 表示当前最新版本的前一个版本
- HEAD^^ 表示当前最新版本的前两个版本,以此类推
- HEAD-1表示当前最新版本的前一个版本
- HEAD-10表示当前最新版本的前十个版本,以此类推
git reset --hard HEAD^
- 方法二:
当版本非常多时可选择的方案
#通过每个版本的版本号回退到指定版本
git reset --hard 版本号
- 回退到最新版本
- 回退到最新版本的前一个版本
- 通过版本号回到新建了test02.py
撤销修改
- 只能撤销工作区、暂存区的代码
- 撤销工作区代码
git checkout 文件名
- 撤销暂存区代码
- 撤销工作区代码
#第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
#第二步:撤销工作区代码
git checkout 文件名
- 撤销仓库区的代码就相当于回退版本操作
版本对比
- 对比本地仓库与工作区
- 在工作区,修改文件
git diff HEAD -- test1.py
- 在工作区,修改文件
- 修改前对比
- 修改后对比
- 对比本地仓库各版本代码
git diff HEAD HEAD^ -- test1.py
文件删除
- 误删处理,撤销修改
#删除文件
rm 文件名
#git撤销修改
git checkout -- 文件名
- 确定删除处理
#删除文件
rm 文件名
#git确定删除文件,对比添加文件git add
git rm 文件名
#删除后记录删除操作版本
git commit -m '删除描述'
远程仓库
- 本地 Git 仓库和 远程仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
- 使用以下命令生成 SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
- 之后会要求确认路径和输入密码,我们这使用默认的一路回车就行,成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key
- 回到远程仓库上,进入 Account => Settings(账户配置),新建 ssh key,粘贴
克隆远程仓库
git clone 远程仓库的ssh
- 查看远程连接信息
git remote -v
- clone 将远程仓库的文件克隆到本地并形成连接
上传到远程仓库
git push
- 例:
- 先添加一句话,通过 echo
- 然后提交到暂存区
- 提交到本地仓库区
- 上传到远程仓库
拉下远程仓库文件
git pull 远程仓库的ssh
pull和clone的区别
- pull 所在的文件夹必须是 git 的仓库,clone 可以是随意的文件夹
- pull 只从远程仓库拉下文件,不建立连接,clone 从远程仓库得到文件并建立连接
- pull 想要连接远程仓库需要
git remote add gitee 远程仓库的ssh
gitee 自己起的,表示远程仓库克隆或下拉到本地仓库的名字,默认是origin,上传远程仓库时会用到
- clone 从本地仓库上传到远程仓库用
git push
,pull 从本地仓库上传到远程仓库用git push 远程仓库名 分支的名
注
- 当远程上传时发生冲突,说明远程仓库的文件(部分或全部)在本地仓库没有,这时用
git push gitee master
就不好用- 可以用
git push gitee +master
强制推送,此时会覆盖掉本地仓库没有的文件 - 可以先把本地仓库没有的文件从远程仓库拉下,然后再一起上传
- 可以用
删除远程仓库
- git remote rm 远程仓库名