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 origin https://url.git 将本地仓库和远程仓库做关联,第一次上传的时候需要写
    git push origin 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配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

    龙哥博客:https://www.cnblogs.com/meilong/p/git-chang-yong-ming-ling.html

  • 相关阅读:
    HDU1879 kruscal 继续畅通工程
    poj1094 拓扑 Sorting It All Out
    (转)搞ACM的你伤不起
    (转)女生应该找一个玩ACM的男生
    poj3259 bellman——ford Wormholes解绝负权问题
    poj2253 最短路 floyd Frogger
    Leetcode 42. Trapping Rain Water
    Leetcode 41. First Missing Positive
    Leetcode 4. Median of Two Sorted Arrays(二分)
    Codeforces:Good Bye 2018(题解)
  • 原文地址:https://www.cnblogs.com/qj696/p/11205030.html
Copyright © 2011-2022 走看看