• Git笔记


    Git

    总览

    • git的工作流程
    • git reset HEAD. 等同于git reset --hard HEAD

    设置签名

    • 项目级别/仓库级别:仅在当前本地库范围内有效
    git config user.name tom
    git config user.email hello@gmail.com
    
    • 系统用户级别: 登入当前操作系统的用户范围
    git config --global user.name tom
    git config --global user.email hello@gmail.com
    

    git基础操作

    状态查看

    git status
    查看工作区,暂存区状态
    

    初始化

    + 初始化: git init 文件夹名
    + 初始化: git init # 当前路径全被管理
    

    添加

    git add .  # 添加所有文件
    git add [file name]  # 添加指定文件  例如 git add hello.txt
    

    提交

    git commit -m "commit message" [file name]  or git commit -m "commit message" # 有冲突是不带具体文件名
    将暂存区的内容提交到本地库
    

    查看历史记录

    • git log
    • git log --pretty=oneline
    • git log --oneline
    • git reflog

    根据log进行前进/后退

    本质

    基于索引值操作[推荐]

    git reset --hard [局部索引值]
    例如: git reset --hard a6ace91
    

    使用^符号: 只能后退

    git reset --hard HEAD^
    注: 一个^表示后退一步, n 个表示后退 n 步
    

    使用~符号: 只能后退

    git reset --hard HEAD~n
    注: 表示后退 n 步
    

    reset命令的三个参数对比

    • --soft参数
    仅仅在本地库移动 HEAD 指针
    
    • --mixed参数
    在本地库移动 HEAD 指针
    重置暂存区
    
    • ***--hard参数***
    在本地库移动 HEAD 指针
    重置暂存区
    重置工作区
    

    删除文件并找回

    前提: 删除前, 文件存在时的状态提交到了本地库。
    操作: git reset --hard [指针位置]
      删除操作已经提交到本地库: 指针位置指向历史记录
      删除操作尚未提交到本地库: 指针位置使用 HEAD
    

    比较文件差异

    git diff [文件名]
      将工作区中的文件和暂存区进行比较
    git diff [本地库中历史版本] [文件名]
      将工作区中的文件和本地库历史记录比较
    不带文件名比较多个文件
    

    分支操作

    创建分支

    git branch [分支名]

    查看分支

    git branch or git branch -v

    切换分支

    git checkout [分支名]

    创建并切换分支

    git checkout -b dev

    删除分支

    git branch -d dev

    合并分支

    第一步: 切换到接受修改的分支(被合并, 增加新内容) 上 git checkout [被合并分支名]
    第二步: 执行 merge 命令 git merge [有新内容分支名]
    

    解决冲突

    • 冲突的表现(合并分支是可能会产生冲突)
    • 冲突的解决
    第一步: 编辑文件, 删除特殊符号
    第二步: 把文件修改到满意的程度, 保存退出
    第三步: git add [文件名]
    第四步: git commit -m "日志信息"
            注意: 此时 commit 一定不能带具体文件名
    

    忽略文件

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

    本地库和远程库

    • linux下查看隐藏的文件 ls -la 或者 ls -lA
    • 11-18号加------------------------------
    • linux下显示/不显示以.开头的隐藏文件 Ctrl + h
    • 团队内部协作
    • 跨团队协作

    创建远程库

    • 刚开始最好不要创建readme等文件,防止冲突

    创建远程库地址别名

    git remote -v 查看当前所有远程地址别名
    git remote add [别名] [远程地址]
    

    推送

    • 后面的分支是本地仓库的名字
      git push [别名] [本地分支名]

    克隆

    • 命令
      git clone [远程地址]
    • 效果
    完整的把远程库下载到本地
    创建 origin 远程地址别名
    初始化本地库
    

    团队成员邀请

    在setting 下的 collborator-->Add collaborator
    copy invite link给其他用户,其他用户登录并访问邀请链接
    
    

    拉取

    pull=fetch+merge
    git fetch [远程库地址别名] [远程分支名]
    git merge [远程库地址别名/远程分支名]
    
    git pull [远程库地址别名] [远程分支名]
    

    团队内部发生冲突

    如果不是基于 GitHub 远程库的最新版所做的修改, 不能推送, 必须先拉取。
    拉取下来后如果进入冲突状态, 则按照“分支冲突解决” 操作解决即可。
    

    跨团队协作

    1. 首先fork别人仓库
    2. 本地修改,然后推送到远程[自己的远程仓库]
    3. Pull Request
    • New pull request
    • Create pull request

    (团队人员)

    1. 查看Pull requests
    2. 交流
    3. 审核代码
    4. 合并代码(Merge pull request, confirm merge)
    5. 将远程库修改拉取到本地

    SSH登录

    step1: 进入当前用户的家目录
      $ cd ~
    step2: 删除.ssh 目录
      $ rm -rvf .ssh
    step3: 运行命令生成.ssh 密钥目录
      $ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com
      [注意: 这里-C 这个参数是大写的 C]
    step4: 进入.ssh 目录查看文件列表
      $ cd .ssh
      $ ls -lF
    step5: 查看 id_rsa.pub 文件内容
      $ cat id_rsa.pub
    step6: 复制 id_rsa.pub 文件内容, 登录 GitHub, 点击用户头像→Settings→SSH and GPG keys
    step7: New SSH Key
    step8: 输入复制的密钥信息
    step9: 回到 Git bash 创建远程地址别名
      git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git
    step10: 推送文件进行测试
    
  • 相关阅读:
    Linux下Fortran多文件编译
    java用poi实现对word读取和修改操作
    SQL DATEDIFF语法及时间函数 Sql 查询当天、本周、本月记录
    深入Java集合学习系列:LinkedHashSet的实现原理
    Log4Net日志
    程序员创业如何才能成功?
    Asp.net 数据采集基类(远程抓取,分解,保存,匹配)
    response.setContentType()的String参数及对应类型
    深入Java集合学习系列:LinkedHashMap的实现原理
    深入Java集合学习系列:HashSet的实现原理
  • 原文地址:https://www.cnblogs.com/zranguai/p/15549640.html
Copyright © 2020-2023  润新知