本文转载自:https://blog.csdn.net/xiaogeldx/article/details/89223650

@

为什么要使用git

传统文档管理

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190411223807480.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA==,size_16,color_FFFFFF,t_70)

  • 我们在写毕业论文时可能会遇到多次修改之后的论文命名方式:
    • 论文_改.doc、论文_改改.doc、论文_改改改.doc、论文_改改改改.doc、论文_改改改改再改.doc、
      论文_改改改改再改TM不改了.doc

源代码管理的好处

  • 方便多人协同开发
  • 方便版本控制

git的诞生

  • 作者 Linux之父:Linux Torvalds
  • git 开发目的:为了辅助 Linux 内核开发
  • 是 Linux Torvalds 在无奈被逼的情况下创造的
  • 2008年,github 网站上线,为开源项目免费提供 git 存储,无数开源项目开始迁移至github
  • git 迅速成为最流行的分布式版本控制系统(没有之一)

git结构

结构分析

本地代码管理

  • 工作区(workspace):添加、修改、删除文件
  • 暂存区(index):将工作区中的操作完成小阶段的存储,是版本库的一部分
  • 本地仓库区(respository):对个人开发的一个小阶段代码存储
    • 记录的各版本可以查看或者回退
    • 但是在暂存区的版本一旦提交就再也没有了(保存到仓库区中)

本地仓库操作

安装git

在Linux安装

sudo apt-get install git

查看是否安装成功

git --version

创建项目

  1. 创建一个项目文件夹用于演示(MyProjects)
  2. 新建本地仓库
cd ~/MyProjects/
#初始化,使其变成 git 的仓库
git init
#会创建一个 .git 隐藏文件

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190411234737716.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA==,size_16,color_FFFFFF,t_70)
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

当前在工作区`

![在这里插入图片描述]( https://img-blog.csdnimg.cn/2019041123560990.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA==,size_16,color_FFFFFF,t_70)
6. 将工作区添加到暂存区

#添加项目中所有文件
git add .
#或者添加指定文件
git add test01.py

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190411235754281.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA,size_16,color_FFFFFF,t_70)
7. 将暂存区文件提交到仓库区
git commit -m '一些描述'
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412000009429.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA
,size_16,color_FFFFFF,t_70)
8. 查看历史版本

git log
git reflog
#git reflog 可以查看所有分支的所有操作记录(包括 commit 和 reset 的操作),包括已经被删除的 commit 记录,git log 不能查看已经删除了的 commit 记录

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412000156364.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA,size_16,color_FFFFFF,t_70)
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412000755377.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA
,size_16,color_FFFFFF,t_70)
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412000825190.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA==,size_16,color_FFFFFF,t_70)

回退版本

  • 方法一:
    • HEAD 表示当前最新版本
    • HEAD^ 表示当前最新版本的前一个版本
    • HEAD^^ 表示当前最新版本的前两个版本,以此类推
    • HEAD-1表示当前最新版本的前一个版本
    • HEAD-10表示当前最新版本的前十个版本,以此类推
      git reset --hard HEAD^
  • 方法二:
    当版本非常多时可选择的方案
#通过每个版本的版本号回退到指定版本
git reset --hard 版本号

撤销修改

#第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
#第二步:撤销工作区代码
git checkout 文件名

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412003441440.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA,size_16,color_FFFFFF,t_70)
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412003517105.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA
,size_16,color_FFFFFF,t_70)

  • 撤销仓库区的代码就相当于回退版本操作

版本对比

文件删除

  • 误删处理,撤销修改
#删除文件
rm 文件名
#git撤销修改
git checkout -- 文件名

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412090753669.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA==,size_16,color_FFFFFF,t_70)

  • 确定删除处理
#删除文件
rm 文件名
#git确定删除文件,对比添加文件git add
git rm 文件名
#删除后记录删除操作版本
git commit -m '删除描述'

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190412091200417.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA,size_16,color_FFFFFF,t_70)
![在这里插入图片描述]( https://img-blog.csdnimg.cn/2019041209123551.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA
,size_16,color_FFFFFF,t_70)

远程仓库

克隆远程仓库

git clone 远程仓库的ssh

上传到远程仓库

git push

拉下远程仓库文件

git pull 远程仓库的ssh

pull和clone的区别

  • pull 所在的文件夹必须是 git 的仓库,clone 可以是随意的文件夹
  • pull 只从远程仓库拉下文件,不建立连接,clone 从远程仓库得到文件并建立连接
    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/201904142017168.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA==,size_16,color_FFFFFF,t_70)
  • pull 想要连接远程仓库需要 git remote add gitee 远程仓库的ssh
    gitee 自己起的,表示远程仓库克隆或下拉到本地仓库的名字,默认是origin,上传远程仓库时会用到
    在这里插入图片描述
  • clone 从本地仓库上传到远程仓库用 git push,pull 从本地仓库上传到远程仓库用 git push 远程仓库名 分支的名
    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190414203504943.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA,size_16,color_FFFFFF,t_70)
    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190414205359582.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9nZWxkeA
    ,size_16,color_FFFFFF,t_70)

  • 当远程上传时发生冲突,说明远程仓库的文件(部分或全部)在本地仓库没有,这时用 git push gitee master就不好用
    • 可以用git push gitee +master强制推送,此时会覆盖掉本地仓库没有的文件
    • 可以先把本地仓库没有的文件从远程仓库拉下,然后再一起上传

删除远程仓库

  • git remote rm 远程仓库名
    在这里插入图片描述
posted on 2019-04-12 09:21  小哥东  阅读(589)  评论(0)    收藏  举报