zoukankan      html  css  js  c++  java
  • Git 学习笔记

    在开始任何命令之前,先上一张图,下面的所有的命令都是围绕这张图展开的

    概览图

    常用命令

    初始化本地库

    git init
    

    会生成一个.git结尾的隐藏文件

    查看工作区文件的状态

    git status
    

    红色表示新增或者被修改的文件, 绿色表示被管理(添加进缓存区)的文件,git status命令查看不到被上传到本地库的文件

    在这里再拓展一个命令: git checkout --file 可以撤销在工作空间对这个文件的修改

    将文件添加进缓存区

    git add .
    git add [文件名]
    

    把项目移除出缓存区

    git -rm --cached [名称]
    

    提交到本地库

    git commit -m '描述信息'
    

    查看历史提交

    git log
    git reflog
    

    回退到上一个版本

    假设我们的版本迭代顺序是: 版本1 -> 版本2 -->版本3

    • 先从版本3 回退到版本2
    git log // 目的是找到历史版本的md5 tag值
    git reset --hard [md5格式的tag值]
    
    // HEAD表示当前版本 
    // ^ 表示上一个版本,  100个^表示 : 第前100个版本
    git reset --hard HEAD^ 
    
    • 再从2回退到版本3
    git reflog // 目的是找到历史版本的md5 tag值
    git reset --hard [md5格式的tag值]
    

    找回已经删除的文件

    找回已经删除的文件是有前提的,什么前提呢? 前提是: 这个被删除的文件曾经被上传到过本地库

    第一种情况:, 我们在本地将文件删除了,并且这次更改的操作被commit到本地库,那么我们回退一下版本不就把文件找回来了?

    第二种情况:, 我们在本地删除了这个文件,但是我们还没有将这次操作commit提交到本地库, 于是我们使用下面的命令,目的是,重新检出文件

    git reset --hard [指针HEAD的hash值]
    

    分支

    分支的目的是隔离不同的环境

    指针的概念: 比如说在master是已经上线了的主分支,它里面存在1000个文件,还有第二个叫dev的开发分支,在这个所有的新功能的拓展都在这个用来开发的分支上编写,假设又新增了100个文件,其实这个叫dev的分支器中真正保存的是自己新增的100个文件,其他的1000个文件通过指针的方式指向master分支

    查看当前的分支

    git branch
    

    创建分支

    git branch [分支名]
    git checkout -b [分支名]
    

    删除分支

    git branch -d [分支名]
    

    合并分支

    git merge [分支名]
    

    如何紧急修复bug

    紧急解决线上bug

    如上图: 采用分支的特点,可以灵活的解决线上的bug, 为什么非的新开辟一个临时分支呢? 因为如果想让dev分支去修改bug是一个得不偿失的行为,很可能这时dev分支的开发人员已经写了很多天的新代码了, 让dev去修复bug,就的先让dev将本地的未写完的代码提交到本地库,然后从master分支上拉取代码到本地,这样诚然可以修改bug,但是修改完了后怎么提交呢? 没法提交啊,新代码往哪里放?

    综上:,需要新开辟一个临时分支,临时分支,让临时分支去修改bug,然后让master去merge这个临时分支, bug修复后,临时分支可以剔除

    本地的当前项目存在多个分支的话,做了个改动后得先提交到本地库才能再切换分支

    产生冲突时报错

    在merge时,难免出现代码冲突, 向下面这样报错

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

    这时需要我们手动去解决,然后重新 add到缓冲区, 再commit到本地库 ,git会我们生成类似下面这样的字符串

    hello one git
        9  <<<<<<<<<<<HEAD
        10 hello two git  edit by hot_fix
        11 ===========
        12 hello two git  edit by master
        13 >>>>>>>>>>> master
        14 hello three git
    

    github

    配置免密登录

    • URL方式
    默认的原始地址:
    git remote add origin https://github.com/zhuchangwu/CIOC.git
    git push -u origin master
    
    修改:
    git remote add origin https://用户名:密码@github.com/zhuchangwu/CIOC.git
    git push -u origin master
    
    • SSH
    执行 ssh-keygen 命令: 在本地生成公钥个私钥
    默认会生成在 ~/.ssh目录下面  
    id_rsa.pub 是公钥
    id_rsa 是私钥
    

    我们需要做的就是拷贝公钥的内容配置进github中,再从github中获取到下面的信息,回到本地库进行认证

    git remote add origin git@github.com:zhuchangwu/CIOC.git
    git push -u origin master
    

    从github上克隆项目

    git clone [ssh地址]
    

    项目被克隆到本地后,如果这个项目存在多个分支,我们同样可以使用git checkout [分支名] 切换到不同的分支下面

    新建仓库

    在github上新创建仓库后,她会给我们一些提示信息,比如说,如何初始化本地库,如何将本地库和远程库管理起来,如何往远程库推送代码,如下图

    上面有一行命令是git remote add origin git#githubXXX.git,什么意思呢? 这其实是给后面那一长串地址取别名叫 origin, 从这以后命令中,origin==后面那一长串

    往github上推送代码

    将本地库中的代码推送上去

    git push -u origin master
    git push origin master  // -u可以省写
    

    从github上面拉取代码

    拉取到工作区

    git pull origin master
    

    从github拉取的本地库

    git fetch origin 分支
    

    实用的rebase(变基)

    • 实用情景1: 小王为了开发在线聊天功能,前前后后往本地库里面提交了10次,为了方面别人查看,于是小王使用下面的命令合并提交记录
    // 从最新的commit记录往下数,合并n条记录(包含n)
    git rebase -i HEAD~n  
    
    // 从最新的commit记录往下合并,直到md5为指定值的那条commit(包含这条commit)
    git rebase -i md5值
    
    • 目的是将下面的存在分支的提交记录,整合成没有分支的提交记录

    整合前

    rebase前

    整合后

    rebase后

    git checkout dev 
    git rebase master
    git checkout master
    git merge dev
    
    // 查看
    git log --graph
    
    • 情景三: 当本地库对A功能新添加了一些代码,但是在开始新的开发前需要从远程的github中拉取一些其他人新增的关于A功能的代码时,两者合并不仅仅会产生冲突,还存在分支, 使用rebase解决
    git fetch origin dev
    git rebase origin/dev
    

    配置文件

    git中存在三个配置文件: 优先级: 当前项目的配置文件优先级最高,最次是系统的配置文件

    第一个: 位于 项目/.git/config

    它里面的配置信息仅对当前项目有效,比如我们前面给ssh串取别名叫origin,就是对当前项目有效

    git config --local user.name 'XXX'
    git config --local user.email 'XXX'
    

    第二个: 位于 用户目录/.gitconfig

    git config --global user.name 'XXX'
    git config --global user.email 'XXX'
    

    第三个: 系统的配置文件

    linux: /etc/.gitconf

    acer : C:Usersacer.gitconf

    git的忽略文件

    凡是和.git目录在同一级目录下面的文件都会被git检测并管理起来,被管理起来就意味着这些文件终究会被推送到远程库,但是有一些数据文件被推送出去会产生安全性的问题,如果我们不想让这些文件被git管理就可以使用git的忽略文件

    创建.gitignore结尾的文件,git会读取这里面的文件,并且会忽略这里面配置的文件

    .gitignore
    files/
    *.txt
    

    github搜索 gitignore有惊喜

    最后再附上一张总结图:

    总结图

    到这里本文又行将结束了,总体的节奏还是挺欢快挺带劲的,我是bloger-赐我白日梦,如果有错误欢迎指出,也欢迎您点赞支持...

  • 相关阅读:
    Chrome 请求过滤扩展实现
    【译】Chrome 扩展 : 入门
    【译】Chrome 扩展 : 扩展是什么?
    【译】Chrome 扩展 : 欢迎
    事务处理
    nrm ls报错解决办法
    Typescript学习总结
    常用插件收藏
    css 设置滚动条样式
    vscode 常用插件
  • 原文地址:https://www.cnblogs.com/ZhuChangwu/p/11749308.html
Copyright © 2011-2022 走看看