Git01--介绍、基本命令、过滤文件、远程仓库

1 git介绍

git是一个开源的分布式版本控制系统,是敏捷高效的代码管理工具,能实现版本控制,代码合并等。
  协同开发,版本管理


# 代码的版本管理工具:
    git:分布式管理,每个客户端都能进行版本管理
    svn:集中管理,客户端和服务端,只能依附于服务端进行版本管理   Subversion的缩写


# git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

# 安装:win
# 下载:一路下一步安装

rm -rf 文件 (Linux命令)
# rm:删除  -f:强制删除  -rf:强制递归删除  /*:根目录下所有文件

2 git与github、gitee、gitlab有什么区别

Git:是一种版本控制系统,是一个命令,是一种工具。
GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,
        公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台
GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,
        用在企业内部网络搭建Git私服,用于企业团队内部协作开发
Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,
        面向互联网开发,分收费和付费,中国最大的开源代码托管平台


# git:软件,版本管理软件

# github:全球最大的开源代码仓库
    -开源的代码,托管在github上,其它人就可以看到,下载,使用
    -代码托管平台(托管开源代码,托管不开源代码)
    -git远程仓库
    
# gitee:码云,国产版github,中国人用的多
    -小公司,花钱使用gitee的私有仓库
    
# gitlab:公司内部自己的代码托管平台

3 git 工作流程

# 工作区    暂存区     版本库

工作区:包含.git文件夹的目录就是工作区,也称为工作目录或工作空间,主要用于存放开发的代码  
       就是你在电脑里能看到的目录
    
暂存区:英文叫stage或index。一般存放在.git目录下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
       .git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
        版本库中存储了很多配置信息、日志信息和文件版本信息等

工作区修改的内容(删除,新增,修改)---》提交到暂存区---》提交到版本库

image

4 git 基本命令

# 1 初始化
    # 创建出一个工作区,在里面操作文件
    git init   # 初始化当前目录作为Git仓库
    git init newrepo  # 初始化指定目录作为Git仓库
    # 以后这个文件夹就被git管理了,生成一个隐藏的.git文件夹,包含了资源的所有元数据

    
# 2 查看状态
    git status 
        -红色:表示变化了,没有提交到暂存区
        -绿色:表示在暂存区,没有提交到版本库
        -如果没有变化,表示所有代码被版本管理了
        
    git status -s # 简短的输出结果
       
        
# 3 从工作区,提交到暂存区(**********)
    git add s1.py  # 只提交s1.py 到暂存区
    git add .      # 把工作区所有更改都提交到暂存区
    
# 4 从暂存区,提交到版本库(**********)  提交到本地仓库
    git commit -m '注释'
    
    注:在Linux系统中,commit信息使用单引号'',Windows系统,commit信息使用双引号""。
        
        
# 5 查看日志
    git log   # 查看版本变化的日志
    git reflog  # 以简略形式显示日志
    git blame <file>  # 以列表形式查看指定文件的历史修改记录。

    -注意:
    # git log 和 git reflog的区别:
        -git log 命令可以显示所有提交过的版本信息如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
        -git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

# 6 撤销版本库提交
    git reset --hard 版本
    # 将暂存区、工作区都与仓库某个版本版一致
    
    版本:
    	版本号 
        HEAD  表示当前版本;HEAD^ 上一个版本;以此类推...
        HEAD~0 表示当前版本;HEAD~1 上一个版本

------------ 7/8 了解不用记----------  
    
# 7 撤销工作区的操作  (恢复工作区的更改:慎用)
    git checkout .  # 全部文件恢复
    git checkout -- <file>   # 指定文件恢复
    # 暂存区不变,把工作区的内容恢复到版本库最新版
    
    # 注:如果没有被版本管理的文件,不会变化 (修改后,不能先提交到暂存区,不然默认没有被版本管理)
              
 
# 8 撤销暂存区操作 (了解即可,没有意义:工作区有变化,直接重新提交到暂存区即可)
    git reset .  # 丢弃了工作区提交暂存区的修改,将暂存区与仓库最新版一致,工作区不变       

    
# 9 配置
    # 1.查看配置信息
    git config --list
	
    # 2.编辑配置文件
    git config -e    # 针对当前仓库 
    git config -e --global   # 针对系统上所有仓库
    
    # 3.设置用户和邮箱 (***)
    # /用户家路径/.gitconfig
    git config --global user.name '用户名'
    git config --global user.email '用户邮箱'
    
    # /当前仓库/.git文件夹/config
    git config  user.name '用户名'
    git config  user.email '用户邮箱'
        
        
# 10 克隆仓库 (从现有Git仓库中拷贝项目)
    git clone <repo>  # 克隆某个仓库
    git clone <repo> <directory>  # 克隆某个仓库到指定目录
    
    例:
    git clone git://github.com/schacon/grit.git
    git clone git://github.com/schacon/grit.git mygrit
        
                    
# 11 空文件夹不会被git管理

5 过滤文件

# 仓库中有些文件或文件夹,不想被git管理

# 在仓库根路径新建.gitignore 文件,在文件中写忽略文件
    # :  表示注释
	
    文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
    
    /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
    
    *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)

eg:
    a.txt:项目中所有a.txt文件和文件夹都会被过滤
    /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
    /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
       
    空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
    lqz.tx?  表示任意一个字符  lqz.txt  lqz.txa


# django项目常见忽略内容:
  .idea
  .DS_Store
  /logs/*.log
  __pycache__
  celerybeat-schedule.

6 git分支

image (1)

# HEAD
HEAD是一个特殊的引用(reference),它指向当前分支的最新提交(commit)
HEAD标识了当前分支中工作的基础点,即你最近一次提交的地方

通俗:HEAD = 你当前所在的位置(当前分支 / 当前提交)

  # 查看,打开/.git/head 文件 
   显示  ref:refs/heads/master 
   再打开  显示:be7d3d....   # master最近一次提交的 版本id号


# 创建分支	
git branch 分支名

  git branch dev # 创建一个dev分支
    

# 查看分支
git branch
   -r  # 列出所有远程分支
   -a  # 列出所有本地分支和远程分支

  # master,新版本 Git 默认主分支叫 main
    

# 切换分支
git checkout dev

# 创建并切换到 
git checkout -b dev
    

# 合并分支
# 把dev合并到master,必须先切换到master上 (******)
git merge dev

# 注意合并方向, 在master分支执行操作,结果就是将dev分支合并到master分支。


# 删除分支
git branch -d dev


### 常见的Git分支创建规则:
master 分支: 线上稳定版本分支

develop/dev 分支: 开发分支,衍生出 feature 分支和 release 分支

  -feature 分支: 功能分支,完成特定功能开发的分支,存在多个,功能合并之后删除 
                 命名:feature/xxx

  -release 分支: 预发布分支,准备待发布版本的分支,存在多个,版本发布之后删除
                 命名:release/具体版本号

hotfix/bugfix 分支: 紧急热修复分支,存在多个,紧急版本发布之后删除
                 命名:bugfix/20251101

7 远程仓库

# github  gitlab gitee作为远程仓库
 
# 在gitee上创建一个空的远程仓库 
   新建仓库的时候,不要勾选Readme初始化,不然不是空仓库,提交远程时会冲突

# 设置账号和邮箱
    git config --global user.name "egon"
    git config --global user.email "3@qq.com"

# 如果本地没有仓库,则新建本地仓库
    mkdir lqz
    cd lqz
    git init
    touch README.md
    git add README.md
    git commit -m "first commit"

# 添加远程仓库(https协议添加)
    git remote add origin https://gitee.com/liuqingzheng/test.git
    

# 把本地的主分支master,推送到远程origin仓库
    git push origin master 


# 如果本地有仓库,则进入本地仓库
    cd existing_git_repo
    git remote add origin https://gitee.com/liuqingzheng/test.git
    git push origin master


# 查看远程仓库
    git remote
       -v # 查看详细


# 删除远程仓库
    git remote remove  origin


# 从远程仓库克隆      与直接下载zip一样
    # 拷贝Git仓库服务器上的几乎所有数据(包括文件、日志信息、历史记录等)
      而且克隆之后,该本地仓库就自动关联该远程仓库
    git clone 远程仓库地址  # 创建一个新的空目录执行该命令

    git clone https://gitee.com/liuqingzheng/luffy_api.git  


# 从远程仓库拉取代码   从远程仓库origin的master分支,拉取最新代码到你的本地
    git pull origin master


# 拓:
git pull 其实是两个命令合二为一:
  git fetch:先去远程下载最新的代码更新   # fetch v.提取
  git merge:自动把最新代码合并到你本地分支

注意:增加了远程仓库,最开始只需要新增一个远程仓库,以后只需要pull拉取代码,和push推送本地代码到远程



### 常见错误:
如果当前本地仓库不是从远程仓库克隆的,而是本地创建的仓库,并且仓库中存在新文件,
此时再从远程仓库拉取文件的时候会报错:(fatal: refusing to merge unrelated histories)
                                    翻译:拒绝合并没有联系的记录   fatal  n. 致命错误信息 

解决:git pull 命令后加入参数 --allow-unrelated-histories

8 ssh连接远程(公司基本上都用这种)

# 推送和下载,使用http协议,需要输入用户名和密码的方式

# 现在使用ssh连接远程
    -不需要再输入用户名密码
    -但是需要配置公钥私钥(非对称加密:加密和解密,采用不同的方式)
           
# 生成公钥私钥(操作系统使用命令)
    -ssh-keygen -t rsa -C "306334678@qq.com"
    -用户家路径的.ssh文件夹下
        -id_rsa:私钥,一定不能丢
        -id_rsa.pub:公钥,可以给别人
    -去gitee设置,配置公钥
    
    
# 删除origin,再增加一个
    git remote add orgin git@gitee.com:liuqingzheng/test.git
posted @ 2022-02-14 22:29  Edmond辉仔  阅读(108)  评论(0)    收藏  举报