zoukankan      html  css  js  c++  java
  • git的使用

     git4个的区域

    git 是版本控制工具

    工作区
      当前工作的地方个(git status 看到的文件是红色的)
    缓存区
      git add之后的是缓存区,(git status 看到的文件是绿色的) 
    本地仓库
      commit 之后的区域
    远程仓库
      远程的仓库 比如码云,github

    git的初始化:

    git init .    //  可以是点 或者文件名(点是当前文件夹的意思) 将当前目录变成git发的仓库 初始化 会产生.git的隐藏的文件
    git add . 文件夹或者文件 . 是当前文件

    当执行git add . 是出现以下警告是因为windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示

    warning: LF will be replaced by CRLF in .idea/workspace.xml. The file will have its original line endings in your working directory
    git commit -m '提交信息' 写的多的,尽量写的多点
    git remote add origin https://url.git 将本地仓库和远程仓库做关联,第一次上传的时候需要写
    git push origin master 将本地的master分支的文件,推到码云上(远程的仓库)

    git的配置信息的查看和修改

    git config -l 查看所有的配置信息
    git config --global -l 查看邮箱用户名
    git config --global --unset user.email 取消邮箱
    git config -- global user.emali "邮箱" 设置邮箱
    git config --global --unset user.name 取消用户名
    git config --global user.name ''用户名"


    git的提交记录

    git log 查看提交记录(之前的提交记录)
    git reset --hard 哈希值(在git log中可以看到回退的地方)本地仓区到工作区
    git reflog 看之前的回退后的之前的版本的提交日志(查看所有的提交记录)
    git reset --hard 哈希值(在git reflog中可以看到哈希值,黄色的)  本地仓区到工作区
    git status 看看当前的状态,
    git diff 对比当前文件中的所有的文件 本地仓库和工作区的文件的的区别,只有在add 和commit的文件才能看出区别
    git diff 文件名 (仅对比这个文件) 本地仓库和工作区的文件的的区别
    git diff --cached 文件名(或者都不加,对比当前文件中的所有的文件) 本地仓库和缓存区的区别
    git checkout 文件名 将工作区的内容回退到最近一次提交的地方
    git reset HEAD 文件名 将缓存区的文件回退到工作区(不会覆盖工作区的内容)

     补充:

    -p 用来显示每次提交的内容差异

    你也可以加上 -2 来仅显示最近两次提交

    [Derek@git]git log -p -2
    commit 86d801bbaa4cc560acc7c8f79a65cac85201f170 (HEAD -> master)
    Author: wangfeng7399 <wangfeng17399@163.com>
    Date:   Tue Feb 19 18:48:48 2019 +0800
    
        update
    
    diff --git a/README.md b/README.md
    index e69de29..a34691f 100644
    --- a/README.md
    +++ b/README.md
    @@ -0,0 +1 @@
    +this is new line
    
    commit 88a09aa009af29e9a784d6dbb68589f70f1c51be
    Author: wangfeng7399 <wangfeng17399@163.com>
    Date:   Tue Feb 19 18:48:04 2019 +0800
    
        create
    
    diff --git a/README.md b/README.md
    new file mode 100644
    index 0000000..e69de29

    另外一个常用的选项是 --pretty。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。 另外还有 shortfull 和 fuller 可以用,展示的信息或多或少有些不同,请自己动手实践一下看看效果如何。

    [Derek@git]$ git log --pretty=oneline
    ca82a6dff817ec66f44342007202690a93763949 changed the version number
    085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
    a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

    但最有意思的是 format,可以定制要显示的记录格式。 这样的输出对后期提取分析格外有用 — 因为你知道输出的格式不会随着 Git 的更新而发生改变:

    git log --pretty=format 常用的选项 列出了常用的格式占位符写法及其代表的意义。

    选项说明
    %H 提交对象(commit)的完整哈希字串
    %h 提交对象的简短哈希字串
    %T 树对象(tree)的完整哈希字串
    %t 树对象的简短哈希字串
    %P 父对象(parent)的完整哈希字串
    %p 父对象的简短哈希字串
    %an 作者(author)的名字
    %ae 作者的电子邮件地址
    %ad 作者修订日期(可以用 --date= 选项定制格式)
    %ar 作者修订日期,按多久以前的方式显示
    %cn 提交者(committer)的名字
    %ce 提交者的电子邮件地址
    %cd 提交日期
    %cr 提交日期,按多久以前的方式显示
    %s 提交说明

    git log 的常用选项

    选项说明
    -p 按补丁格式显示每个更新之间的差异。
    --stat 显示每次更新的文件修改统计信息。
    --shortstat 只显示 --stat 中最后的行数修改添加移除统计。
    --name-only 仅在提交信息后显示已修改的文件清单。
    --name-status 显示新增、修改、删除的文件清单。
    --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
    --relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
    --graph 显示 ASCII 图形表示的分支合并历史。
    --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

     限制 git log 输出的选项 中列出了常用的选项

    选项说明
    -(n) 仅显示最近的 n 条提交
    --since, --after 仅显示指定时间之后的提交。
    --until, --before 仅显示指定时间之前的提交。
    --author 仅显示指定作者相关的提交。
    --committer 仅显示指定提交者相关的提交。
    --grep 仅显示含指定关键字的提交
    -S 仅显示添加或移除了某个关键字的提交

    git的快照

    快照:适用一个人开发的时候,快照不需要拍摄太多
    git stash 快照 (在工作区中有修改才能做快照),做完快照,文件恢复到你最近提交的状态
    git stash pop 恢复快照 = git stash apply + git stash drop
    git stash list 查看快照
    
    
    $ git stash list
    stash@{0}: WIP on master: 768d893 33333
    
    git stash apply 快照的版本号 恢复快照
    git stash apply stash@{0}
    git stash drop 快照的版本号 删除快照 
    冲突: 快照的内容和做完快照后修改的文件内容的内容有冲突,会将快照的内容个修改的内容同
    同一行修改,只能通过人工来决定保留什么
    
    删除快照
    git stash drop stash@{0}


    快照使用的场景: 想把文件恢复最近一次提交的状态,保留从提交后的写的内容.

    git的分支


    切换分支前所有的代码都提交
    分支:

    git branch 查看分支
    git brabch 分支名 新建分支
    git checkout 分支名 切换分支
    
    $ git checkout dev
    error: you need to resolve your current index first
    test: needs merge
    
    
    git checkout -b 分支名 (新建分支+切换分支) 
    
    合并分支
    git merge name(分支名) 合并分支,在合并到分支上做合并,先切换到要合并的分支,合并分支的时候有可能代码有冲突,同事讨论怎么留代码
    
    git brabch -d 分支名 删除分支


    工作中,有多个分支
    . master分支(线上的代码)
    . dev 分支 (正在开发的代码,没上线的,测试用)
    . review分支 (代码审核)
    审核:
    . 谁审核: 组长
    . 审核什么: 逻辑 质量 PEP8规范
    . 一个人一个分支
    一般情况:
    . 一般一个小功能,开发完成之后做一个合并
    . 合并代码,大家都在

    git 和github一样吗
    git 做版本控制 linux的创始人
    github 就是一个网站 全球最大的同性交友网站
    码云
    gitlab 私有化部署
    git 无中心化
    svn 中心化
    区块链
    因为没有权限

    remote: Permission to 417685417/zdh.git denied to xiadongzhi1988.
    fatal: unable to access 'https://github.com/417685417/zdh.git/': The requested URL returned error: 403控制面板-凭据管理-windows凭据 把这个里面的都删掉


    git push origin name 把本地分支上传到远程
    git clone https://url.git 下载远程仓库的文件 克隆下来的代码只有master分支



    git checkout -b dev origin/dev = git branch dev origin/dev + git checkout dev
    git checkout -b dev origin/dev 这个命令可以切换分支,并以远程仓库的dev分支做母版创建一个dev分支’

    以远程仓库的dev分支做母版创建一个dev分支’
    git pull origin name 将远程仓库的文件拉取到本地


    tag标签

      标签的意义

    • bug修复以后

    • 新增重要的功能 里程碑

    git tag 查看标签
    
    git show 查看标签的详细信息
    
    git tag -a v1.0 -m "信息" 对当前位置打标签
    
    git tag -a v1.0 -m "信息" hash值 对之前的位置打标签
    
    git tag -d name 删除标签
    
    git push origin --tags 将本地的tag推送到远程仓库
    
    git push origin :refs/tags/name 删除远程的tags

    忽略文件

      上传文件的时候可以将一些你不想上传的文件忽略掉:

    如果是是github上新建的项目,可以做如下操作:

     会在你的项目中出现一个.gitignore 的文件,里面写的是你想忽略的内容

    忽略文件的原则是:

    1. 忽略操作系统自动生成的文件,比如缩略图等;
    2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件

    举个例子:

    假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略Windows自动生成的垃圾文件:

    # Windows:
    Thumbs.db
    ehthumbs.db

    然后,继续忽略Python编译产生的.pyc.pyodist等文件或目录

    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build

     加上你自己定义的文件,最终得到一个完整的.gitignore文件,内容如下:

    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
    
    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    
    # My configurations:
    db.ini
    deploy_key_rsa

    最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean

    使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

    有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了

    $ git add App.class
    The following paths are ignored by one of your .gitignore files:
    App.class
    Use -f if you really want to add them.

     如果你确实想添加该文件,可以用-f强制添加到Git:

    $ git add -f App.class

     .gitignore忽略规则的优先级

    在 .gitingore 文件中,每一行指定一个忽略规则,Git检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
    1)从命令行中读取可用的忽略规则
    2)当前目录定义的规则
    3)父级目录定义的规则,依次递推
    4)$GIT_DIR/info/exclude 文件中定义的规则
    5)core.excludesfile中定义的全局规则

    .gitignore忽略规则的匹配语法

    在 .gitignore 文件中,每一行的忽略规则的语法如下:
    1)空格不匹配任意文件,可作为分隔符,可用反斜杠转义
    2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。
    3)可以使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。
    4)以斜杠"/"开头表示目录;"/"结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;"/"开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。
    5)以星号"*"通配多个字符,即匹配多个任意字符;使用两个星号"" 表示匹配任意中间目录,比如`a//z`可以匹配 a/z, a/b/z 或 a/b/c/z等。
    6)以问号"?"通配单个字符,即匹配一个任意字符;
    7)以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如[0-9]表示匹配所有0到9的数字,[a-z]表示匹配任意的小写字母)。
    8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起作用的。也就是说"!"开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用"!"也不会再次被包含。可以使用反斜杠进行转义。

    需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

  • 相关阅读:
    好还是坏:人工智能二分类问题
    神经网络手写数字识别
    TensorFlow or PyTorch
    什么是深度学习
    五个常见 AI 开发库
    AI——第四次工业革命
    NodeJs获取不到POST参数
    Android权限
    【nodejs学习】3.进程管理及异步编程
    每日一题
  • 原文地址:https://www.cnblogs.com/lulin9501/p/11166369.html
Copyright © 2011-2022 走看看