• git的使用


    git的使用

    git和github 的区别

    • Git 是一种方法。而 GitHub 只是使用这种方法的一个代码仓库,就是git是操作的,GitHub是个网址

    初始化git仓储

    新建一个项目project,点进目录右击选择git bash

     git init # 初始化仓库,这个git对我们项目的代码进行备份
    

    配置用户名和邮箱

     git config --global   user.name "xiaoming" # 用户名
    
    git config --global user.email  "xx@sina.cozcm" # 邮箱
    
    
    git config  user.email "zc@qq.com"
    git config  user.name "zc"
    不加global是局部的
    
    

    把代码存储到 git 仓储中

    • 分两步走:

      • 把代码放到.git隐藏目录的大门(暂存区)

         git add ./readme.md # ./readme.md 文件路径要说明
        
      • 把门口的代码放入房间里面

         git commit -m "这是对这次添加东西的说明"
        

    区域划分:

    • 工作区:就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。
    • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    • 暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master。

    查询当前所处的工作状态git status

     On branch master
    nothing to commit, working tree clean
    # 我们提交完了,当前的工作区是干净的
    
    
    (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   readme.txt
    # 把文件放在了暂存区
    
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   readme.txt
    # 我们的文件修改了,但是没有放到暂存区(大门口)
    

    如果我们修改了两个文件是不是要add两次命令呢,不需要

     git add ./ # 当前目录只要是修改过的文件都放到暂存区
    

    一次性把我们修改的代码放到房子里面去

     git commit --all -m "一些说明"
    

    查看日志

     git log # 查看历史提交的日志
    git log --oneline # 简洁版的日志
    

    git 版本回退

    先用日志功能查看我们修改过的功能,在选择回退的版本

    修改过后的版本日志

     $ git log --oneline
    489310a (HEAD -> master) 添加了js和一个功能
    01ebf78 我们完成四个功能
    20e8c3c 我们完成三个功能
    bc9c3b5 这次加了一个功能
    6dad8ac 这是我的开始
     git reset --hard Head~1  # 1 表示退回到上上次代码提交的状态
    						 # 0 表示上一次
    

    退回后的版本

     01ebf78 (HEAD -> master) 我们完成四个功能
    20e8c3c 我们完成三个功能
    bc9c3b5 这次加了一个功能
    6dad8ac 这是我的开始
    

    通过版本号回退
    查看日志

     $ git log --oneline
    489310a (HEAD -> master) 添加了js和一个功能
    01ebf78 我们完成四个功能 # 01ebf78版本号
    20e8c3c 我们完成三个功能 # 20e8c3c版本号
    bc9c3b5 这次加了一个功能
    6dad8ac 这是我的开始
     git -reset --hard 01ebf78 # 精确的回退到某一次的提交状态
     01ebf78 (HEAD -> master) 我们完成四个功能
    20e8c3c 我们完成三个功能
    bc9c3b5 这次加了一个功能
    6dad8ac 这是我的开始
    

    假如说我们退回之后又后悔之前的操作咋办呢?

     git -reset --hard 01ebf78 # 精确的回退到某一次的提交状态
    

    但是如果我们把窗口关掉了,记不住版本号,又想回到以前的状态咋办呢

     git reflog  # 可以看到每一次切换的版本的记录,可以看到所有提交的版本号
     01ebf78 (HEAD -> master) HEAD@{0}: reset: moving to Head~1
    489310a HEAD@{1}: commit: 添加了js和一个功能
    01ebf78 (HEAD -> master) HEAD@{2}: commit: 我们完成四个功能
    20e8c3c HEAD@{3}: commit: 我们完成三个功能
    bc9c3b5 HEAD@{4}: commit: 这次加了一个功能
    6dad8ac HEAD@{5}: commit (initial): 这是我的开始
    

    忽略文件

    -空文件夹不被管理
    	-指定某些文件或者文件夹不被git管理
        -在项目根路径,跟.git文件夹一个路径,新建.gitignore.,在里面配置
        - 语法:
        	# 号是注释,没有用
            文件夹名字,表示文件夹忽略,不被管理
            /dist 表示根路径下的dist文件夹,不被管理
            *.py   表示后缀名为py的文件,都被忽略
            *.log*
    

    分支管理

    主分支:默认的是master

    创建分支:

      git branch dev # 创建了一个dev分支 创建dev分支里面的东西和master分支的东西是一样的
    

    切换分支:

     git checkout dev # 切换到指定分支
    

    查看分支:

     git branch
    
    """
    $ git branch
      dec
      dev
    * master # 当前所在分支
    """
    

    合并分支:

     git merge dev # 指定分支的名称
    

    比如我们我们创建分支,在分支里面已经完成了我们的功能五,但是当我们去切换到master的时候我们忘记在分支里面添加了功能五,又在master里完成了功能五,当我们去合并的时候会出现

     $ git merge dev
    Auto-merging readme.md
    CONFLICT (content): Merge conflict in readme.md
    Automatic merge failed; fix conflicts and then commit the result.
    

    合并的时候如果有冲突,需要手动去处理,如何去处理呢,那就是要到你完成的功能里面去选择,处理完后还需要再提交一次。

    远程仓库

    提交代码到GitHub(当作git的服务器)

     git push [地址] master #
    

    拿到远程的代码

    首先要建立一个新的仓储

     git push https://github.com/zc117809/test112.git master
    

    克隆

    要先建立一个文件,在文件里打开git bash输入

     git clone https://github.com/zc117809/test112.git 
    

    多次执行会覆盖本地的内容

    ssh 方式上传代码

    有公钥和私钥,这两个是有关联的

    • 生成公钥和私钥

       ssh -kegen -t rsa -c "邮箱"
      

    多人协作

    小明和小红现在同时写作开发,小红在服务器上pull到小明的数据,pull完之后,小红在html文件上做了一个功能,备份到本地,这个时候小明又更新了版本,小红又去pull这个时候会出现冲突,小红新添加的功能会和小明更新的版本上出现错乱。

    总结:

    • 查看远程库信息,使用git remote -v
    • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
    • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
    • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
    • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
    • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
    • 解决完之后还要上传到服务器push

    当我们push时,加上-u参数,在下一次push时我们只需要写上git push 就能上传我们的代码(加上-u之后,git拉取当前我们分支与远程指定的分支进行关联,git push origin master

  • 相关阅读:
    元旦快乐,送大家一条水晶龙
    小随笔:利用Shader实现模型爆炸和沙粒化的效果
    小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果
    #UnityTips# 2017.11.14
    微软Tech Summit 2017,微软携手Unity打造MR之夜
    FixedUpdate真的是固定的时间间隔执行吗?聊聊游戏定时器
    第9期Unity User Group Beijing图文报道:《Unity实战经验分享》
    利用GPU实现无尽草地的实时渲染
    大数据学习笔记01-HDFS-集群安装
    Guava学习笔记(三):集合
  • 原文地址:https://www.cnblogs.com/zc110/p/12860354.html
Copyright © 2020-2023  润新知