zoukankan      html  css  js  c++  java
  • git原理和基本用法

    一:介绍

     

    1.什么是git?

    是一种用于协同开发的版本管理工具

     

    2.git能干什么?

     

    完成 协同开发 项目,帮助程序员整合代码

    • 帮助开发者合并开发的代码
    • 如果出现冲突代码的合并,会提示后 提交合并代码的开发者,让其解决冲突
     

    2种Git软件:SVN、Git

    • svn(集中式管理)
    • git(分布式管理、协同开发、版本管理)
     

    常用的git版本控制器管理代码的公共平台

    • github
    • gitee
     

    3.Github、Gitee、Gitlab的区别

    • Github:一般开源的代码都放在github,代码托管平台(公有仓库、私有仓库),公司代码一般不会放在上面
    • Gitee:中国版本的github,开源低吗放在共有仓库,有一部分公司的代码会托管到gitee的私有仓库
    • Gitlab:公司自己搭建的github,公司内部自己访问(可以用Docker拉1个gitlab的镜像跑起来)
     

    4.下载链接:https://git-scm.com/

     

    5.安装

    一路下一步即可

    6.工作流程

    ① 工作区:工作的目录,文件夹下,存放一些文件,文件中写内容
    ② 暂存区:工作区的更改,提交到暂存区(在暂存区中临时存储)
    ③ 版本库:本地文件,内容变更记录

    7.提示信息

    1.有红色信息(工作区有内容,没有被提交到暂存区),就执行 add
    2.全绿信息(内容全部在暂存区),才执行 commit
    3.只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本

     

    一:核心操作

     

    1.初始化仓库

    让当前路径被git管理起来
    git init
    
    # 在当前路径下创建darker文件夹,并被git管理
    git init darker
    .git目录默认隐藏,可以通过命令ls -ah查看
     

    2.把文件添加到暂存区

    添加指定文件
    git add 文件名
    一次添加所有文件
    git add . 

    3.提交暂存区内容到版本库

    git commit -m '本次提交的说明'

    4.把项目提交到(远程)仓储

    git push

    5.撤销暂存区提交:add的逆运算(很少使用)

    ①撤销所有暂存区的提交
    git reset HEAD .
    ②撤销某一文件的暂存区提交
    git reset 文件名
    ③撤销所有暂存区的提交
    git reset .

    6.过滤文件

    项目中添加过滤文件,加了之后,被过滤的文件/文件夹就不被git管理了
    在项目下新建.gitignore文件(编写过滤规则#表示注释
    • 忽略某个文件夹(写文件夹名):node_modules
    • 忽略某个文件(写文件名):.DS_Store
    • 忽略以npm-debug.log开头的所有文件:npm-debug.log*
    • 忽略以.sln结尾的所有文件:*.sln
    • 忽略a文件夹下的aa.txta/aa/txt
    • .gitignore是要被管理起来的
    在Windows平台下创建的时候,可能需要在最后加一个.,也就是:.gitignore.
    .gitignore 文件
    1.在仓库根目录下创建该文件
    2.文件与文件夹均可以被过滤
    3.文件过滤语法
    ②过滤文件内容
    文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
    /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
    ③eg:
    a.txt:项目中所有a.txt文件和文件夹都会被过滤
    /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
    /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
    *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
    空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)

    7.查看仓库当前的状态

    查看状态(红色和绿色),必须全绿再提交到版本库
    • 红色:更改未被提交到暂存区
    • 绿色:更改已经到暂存区了,但是没有到版本库
    git status

    8.查看提交日志

    git log
    (精简+详细的日志)
    git reflog

    9.回退版本

    ①回退到上一版本
    git reset --hard HEAD^
    ②回退到上上版本
    git reset --hard HEAD^^
    ③ 回退到指定版本
    git reset --hard [版本ID]
    ④ 撤销所有暂存区的提交
    git reset .

    10.回滚(回滚到版本管理的最新位置)

    git checkout .

    二:用户操作

     

    1.设置全局用户(作用于全局)

    git config --global user.name '用户名'
    git config --global user.email '用户邮箱'
    该操作会在全局文件 C:Users用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用
     

    2.设置局部用户(作用于当前路径)

    git config user.name '用户名'
    git config user.email '用户邮箱'

    在当前仓库下的config新建用户信息,只能在当前仓库下使用

    一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

    三:分支管理

    主分支:只记录版本

    了解:git flow 工作流

     

    1.查看远程分支

    git branch -a

    2.查看本地分支

    • 绿色代表当前所在的分支
    git branch

    3.创建分支

    • 创建分支的代码,基于master创建出来的,代码和现在的master一样

    无法创建空分支

    git branch [新建分支名]

    4.创建并切换分支

    (加-b表示创建并切换)
    git checkout -b 分支名

    5.切换回分支

    git checkout 分支名

    6.从主分支里创建新分支

    git checkout master -b 新分支名

    7.合并某分支到当前分支

    git merge 分支名

    8.删除分支

    git branch -d 分支名
    git branch -D 分支名 (强行删除分支)

    9.远程分支合并

     

    ① 远程创建,同步到本地

    变基(rebase)

     

    ② 本地创建,传到远端

    • 拉取最新分支:git pull origin master
    • 切换到主分支:git checkout master
    • 合并分支:git merge dev
    • 推送到远程仓库:git push origin master

    四:git远程连接

     

    0.远程拉取项目

    git clone [项目地址]

    1.无仓库,需要新建

    mkdir test
    cd test
    git init
    touch a.txt
    git add a.txt
    git commit -m "添加了a.txt"
    git remote add origin 已有仓库  # 连接远程
    git push origin master

    2.已有仓库

    cd test
    git remote add origin 已有仓库  # 连接远程
    git add .
    git commit -m "XXX"
    git push origin master

    3.查看远程仓库(没有就看不到)

    git remote

    4.线上回滚

    # 1 切换到master分支
    # 2 回滚打某个版本  git reset --hard  版本号
    # 3 强制提交代码 git push origin master -f

    五:解决冲突

    出现冲突的2种情况:
    
    1.分支合并
    
    2.同一条分支上,2个人同时修改了同一个文件的同一行代码

    1.情况1

    A和B同时开发项目并且都将服务器的分支代码拉(pull)到自己电脑上
    A开发完后,将自己的项目推(push)到了服务器的分支
    A和B修改的是同一行代码
    B开发完后,没有先拉(pull),而是直接将自己的项目推(push)到了服务器的分支
    此时,出现了冲突,这个冲突需要由B解决
    解决方法:
    git merge A_master (在B_dev分支上操作)
    -解决冲突(删你的,同事的,合并起来)
    git add .  
    git commit 
    -正常了,冲突解决

    2.情况2

    master分支上a.py中的第10行代码为 x = 1
    dev分支上a.py中的第10行代码为 x = 99
    在master分支合并dev分支
    此时同一个文件的同一行代码,在2个分支不同,出现了冲突
    解决方法:
    # 手动线下合并代码并提交到远程
    git checkout master
    git merge dev 
    
    -如果出冲突,解决
        -git add .
        -git commit -m 'xxx'
        -git push origin master

    五:git项目创始者和开发者

     

    1.项目创始者

    负责分支的创建和管理
     

    2.项目开发者

    把项目拉下来,继续开发
    git clone https://gitee.com/xxxxxx/xxxx.git
        -能看到完整的版本和日志控制
        -可以回复到任意版本
        
    git rest --hard 版本号
    git checkout . # 表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前再的版本上的东西
    
     #本地新增c.txt文件
        -提交到暂存区
        -提交到版本库(没有提交到远程,远程看不到)
        -提交到远程:git push origin master
        
    # 让a文件夹中的代码成为最新的
        -git pull origin master
    重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去

    六:ssh连接和https连接

     

    1.公司内部大部分用ssh连接

    -领导给你一个git地址(项目地址)
    -你 git clone 地址  到本地
    -改代码,改完了---》提交(禁止)
    -ssh配置,以后都不用输密码了

    2.配置如何做

    # 生成公钥与私钥(邮箱可以随意填写)
    ssh-keygen -t rsa -C "*@*.com"
    
    # 查看公钥
    cat ~/.ssh/id_rsa.pub

    会在C:Users用户.ssh下生成2个文件

    • id_ras:公钥
    • id_ras.pub:私钥

    -对称加密(加密和解密用同一套秘密)
    -非对称加密(公钥和私钥),公钥加密,私钥解密
    
    -生成一对公钥和私钥(用命令)
        -https://gitee.com/help/articles/4181
        -ssh-keygen -t rsa -C "xxx@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)  
        -把公钥复制出来,去码云上配置

     

    3.跟远程操作有三个命令

    git pull
    git push
    git feacth(一般不用,他跟pull是一个东西,当作不知道)

    删除Windows中的连接git的密码:

    Windows凭据

    七:PyCharm操作git

     

    1.创建一个文件夹,右键Git Bash here ,输入下面命令

    git init
    此时,会生成一个.git的隐藏文件夹
     

    2.将项目克隆下来

    git clone https://xxxxx.gitee.com.xxx.git

    3.右键 - 用pycharm打开

     

    4.点击左上角:File - Settings,进行如图操作,可以获取到Git当前版本

    前提:安装 并 启动了git插件

    5.2个按钮的功能

     

    6.更多功能

     

    7.一步到位的操作(修改+添加到暂存区+注释并添加到版本库+push到远程仓库)

     

    八:其他操作

    1.查看ssh密钥

    ①进入.ssh目录
    cd ~/.ssh
    ②查看id_rsa.pub文件
    cat id_rsa.pub

    2.克隆远程项目

    git clone 远程源地址

    3.删除文件

    ①删除版本库中的文件
    git rm filename
    ②恢复工作区中误删的文件
    git checkout -- filename

    PS:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

     

    4.远程仓储

    ①创建ssh key密钥
    ssh-keygen -t rsa -C "youremail@example.com"
    ②在远程仓库中添加ssh公钥
    ③关联远程库
    git remote add origin git@server-name:path/repo-name.git
    ④第一次推送master分支的所有内容,此后只需要使用git push origin master即可推送最新修改
    git push -u origin master

    5.多人协作

    ①查看远程仓储的详细信息
    git remote -v
    ②推送本地分支到远程仓库
    git push origin 本地分支名

    如果发生冲突,用git pull试图合并,如果发生冲突则解决冲突,再进行推送

    如果git pull后提示no tracking information(没有追踪信息),则进行第四项,建立关联,之后pull,有冲突再合并

    ③在本地创建和远程分支对应的分支
    git checkout -b 本地分支 origin/远程分支名
    ④建立本地分支和远程分支的关联
    git branch --set-upstream 本地分支名 origin/远程分支名

    6.分支策略

    1.master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    2.干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    3.每个人都有自己的分支,时不时地往dev分支上合并就可以了

     

    7.git fetch和git pull的区别

    与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge

    • 如果需要有选择的合并git fetch是更好的选择
    • 效果相同时git pull将更为快捷

    九:修改已有项目的流程

     

    1.初始化仓库

    git init

    2.设置局部用户

    git config user.name '用户名'
    git config user.email '用户邮箱'

    3.添加已有仓库

    git remote add origin 已有仓库

    4.把项目拉下来

    • 拉下来不是一个项目文件夹,而是项目中的许多文件和文件夹
    git pull 仓库地址

    5.修改好项目

     

    6.添加到版本库

    git add .

    7.提交注解(此次操作修改了什么等)

    git commit -m '修改的内容'

    8.推到远程仓库

    git push origin master
  • 相关阅读:
    用JavaDoc生成项目文档
    thymeleaf参考手册
    转的一个Java基本功
    杂记
    修改Esxi克隆的CentOS的IP地址
    CentOS搭建socket5代理服务器
    CentOS上搭建Nginx + Mono 运行 asp.net
    启动PPT的时候一直配置vs2013的问题解决
    swift 元组
    swift 集合类型(二)
  • 原文地址:https://www.cnblogs.com/ltyc/p/14539541.html
Copyright © 2011-2022 走看看