文章目录
  1. 1. git log 命令
    1. 1.0.1. git log -n
    2. 1.0.2. git log –stat -n
    3. 1.0.3. git log –pretty=format:” “
  • 2. git Commit message
  • 3. git issues
  • 4. git branch
  • 5. git config
    1. 5.1. git仓库备份
    2. 5.2. git一次提交到两个仓库
  • 6. git 文件对比
    1. 6.1. git Tag
    2. 6.2. git patch
  • 7. 把gitbash的编辑器设置为其他文本编辑器
  • 8. 查看本地rebase之前的提交记录
  • 9. 如何查看某次提交修改的文件有哪些
  • 10. 以图表格式显示提交记录
  • 11. 比对最近几次已经commit代码改动内容
  • git log 命令

    git log -n

    显示前N条日志

    git log –stat -n

    显示简要的增改行数统计,每次提交文件的变更统计

    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 提交说明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    git log --pretty=format:" %s" -3
    test:add new question add question6
    test:add new question add question5
    test:add new question
    //命令好用,起个别名
    git config alias.logs "log --pretty=format:'%s'"
    // 以后就可以使用如下命令,命令结果和上面一条命令结果一样
    git logs -3
    // 某些文件或某个文件的最近3次记录
    git logs -3 static/*.html
    // 指定作者为"BeginMan"的所有提交
    git log --author=BeginMan
    // 指定关键字为“init”的所有提交
    git log --grep=init
    // 指定提交者为"Jack"的所有提交
    git log --committer=Jack

    //查看文件的修改记录 可以看到提交版本
    git log demo/js/propagation.js
    commit bdbcf6226b05207fc4d4a6b56ab566ff0744295e
    //回退到指定版本
    git reset bdbcf6226b05207fc4d4a6b56ab566ff0744295e demo/js/propagation.js

    git Commit message

    Commit message 都包括三个部分:Header,Body 和 Footer。

    1
    2
    3
    4
    5
    <type>(<scope>): <subject>
    // 空一行
    <body>
    // 空一行
    <footer>

    Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)

    type 意义
    feat 新功能(feature)
    fix 修补bug
    docs 文档(documentation)
    style 格式(不影响代码运行的变动)
    refactor 重构(即不是新增功能,也不是修改bug的代码变动)
    test 增加测试
    chore 构建过程或辅助工具的变动

    scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

    subject是 commit 目的的简短描述,不超过50个字符。

    以动词开头,使用第一人称现在时,比如change,而不是changed或changes
    第一个字母小写
    结尾不加句号(.)

    总结:commit message应包含type+":"+subject

    git issues

    1
    2
    3
    4
    // 关闭一个
    Closes #234
    // 关闭多个issue
    Closes #123, #245, #992

    git branch

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    查看所有分支(前面带*号的代表你当前工作目录所处的分支)
    git branch -a

    创建test分支
    git branch test

    切换到test分支
    git checkout test

    删除本地test分支
    git branch -d test

    删除远程test分支
    git push origin --delete test

    合并分支(把test分支合并到master分支上)
    git checkout master
    git merge test

    把当前test分支提交到远程test分支
    git push origin test

    把本地所有分支提交到远程相对应的分支上
    git push


    //复制代码库到本地
    git clone http://192.168.1.231/group-two/jujusports-web.git

    //添加所有未添加的文件
    git add .


    //查看版本区别只显示文件名字
    git diff --name-only

    //git 查看某版本文件
    //git show 版本号 文件名
    git show 33e636914bf61536fe56d3872338f0087c1a1e5c static/order_undone.html

    //刚创建git需要添加分支
    git push -u origin master

    //git撤销用branch上代码覆盖本地仓库及本地工程
    git checkout routes/index.js

    git reset [--hard|soft|mixed|merge|keep]
    /*
    [<commit>或HEAD]:将当前的分支重设(reset)到指定的<commit>或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。mode的取值可以是hard、soft、mixed、merged、keep。下面来详细说明每种模式的意义和效果。
    A). --hard:重设(reset) index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。
    B). --soft:index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中。
    C). --mixed:仅reset index,但是不reset working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成"Changes to be committed",但是会打出什么还未被更新的报告。报告如下:
    引用
    Unstaged changes after reset:
    M Test.Scala
    M test.txt
    */

    git config

    1
    2
    3
    4
    5
    6
    git config --global user.name  openks
    git config --global user.email zhuyangxing@foxmail.com
    //显示所有配置
    git config --list
    //保存git的用户名密码
    git config --global credential.helper store

    git提交流程
    为了保持提交记录的干净

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // 从服务器拉代码
    git pull
    // 本地修改1
    git commit -am "c1"
    // 本地修改2
    git commit -am "c2"
    // 本地修改3
    git commit -am "c3"
    // 1,2,3修改为一个功能先合并提交
    // 即本地rebase
    git rebase -i
    git rebase -i SHA1
    git rebase -i HEAD~5
    // 弹出编辑框 点击insert进入编辑模式 保留第一个pick 其他的pick改为s 然后esc :wq
    // 然后从远程服务器拉代码
    git pull
    // 如果不冲突则最好 直接push到服务器
    git push
    // 如果冲突则merage合并冲突
    git add .
    git commit -am "合并"
    // 再次rebase 重新合并代码
    git rebase
    // 然后再push到服务器
    git push

    git仓库备份

    需求很简单
    oschina上做主要的代码,在coding做代码备份

    1. 首先在oschinacoding上分别创建项目test_git_mirroe
    2. oschinaclone代码git clone https://git.oschina.net/openks/test_git_mirroe.git
    3. 跳转到项目目录cd test_git_mirroe
    4. 添加coding的远程仓库git remote add coding https://git.coding.net/zhuyangxing/test_git_mirroe.git
    5. 提交coding做镜像代码git push --mirror coding
    6. 以后在test_git_mirroe上提交的代码都提交到oschina
    7. 想要在coding上同步就执行git push --mirror coding即可

    git一次提交到两个仓库

    修改.git文件夹下的config文件
    fetch下添加想要提交的其他git路径即可

    1
    2
    3
    4
    [remote "origin"]
      url = https://git.oschina.net/openks/test_git_mirroe.git
      fetch = +refs/heads/*:refs/remotes/origin/*
      url = new git url

    git 文件对比

    方法一:还是我最常用的命令行

    1
    git diff <commitA> <commitB> filename

    方法二:在gitlab上对比查看

    输入两个提交版本,会显示所有文件的版本差异相同的则不显示,具体如下图
    image

    再上一张我没找到问题的文件对比图,这确实是什么都没改啊(加了class这个除外)
    image

    git Tag

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 创建tag
    git tag tagName -m "这里是tag相关信息"
    # 创建安全tag 别人无法修改并覆盖该tag确保该tag是认证安全版本 建议使用
    git tag -s tagName -m "这里是tag相关信息"
    # 如果上面方法报错则使用下面方法
    git tag -u 这里是gpg用户名 tagName -m "这里是tag相关信息"
    # 查看tag
    # -l 显示tag名
    # -n 显示message
    git tag -l -n
    # 删除Tag
    git tag -d tagName
    # 删除远程tag
    git push origin --delete tag tagName
    # 将本地所有标签一次性提交到git服务器
    git push origin –-tags
    # 查看项目的tag验证信息
    git tag -v v1.0

    关于GPG

    1
    2
    3
    4
    5
    6
    7
    # 生成GPG Key 根据提示选择加密方法 并输入相关信息即可
    gpg --gen-key
    # 验证GPG Key是否生成成功
    gpg --list-keys
    # 上边显示的是公钥,顺便也看一下与之匹配的私钥生成如何:
    gpg --list-secret-keys
    # 然后就可以使用gpg加密你的tag了

    git patch

    git中的patch有两种:
    一是用git diff生成的标准patch
    二是用git format-patch生成的Git专用Patch
    git format-patch生成的patch在文件的前面会有diff的信息,还有提交者,时间等等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 使用git diff 生成patch (不建议)
    git diff SHA1 > a.patch
    # 先检查patch文件
    git apply --stat a.patch
    # 检查能否应用成功
    git apply --check a.patch
    # 打补丁
    git apply a.patch
    patch p1 < a.patch
    # 使用git format-patch 生成patc 建议)
    git format-patch SHA1 > a.patch
    # 先检查patch文件
    git apply --stat a.patch
    # 检查能否应用成功
    git apply --check a.patch
    # 打补丁
    # git am 必须使用的是用git format-patch 生成的patch文件来打补丁,
    # 而不能是使用git diff生成的patch
    # 使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息
    git am --signoff < a.patch

    有道分享


    add 2018-01-17 10:42:13

    把gitbash的编辑器设置为其他文本编辑器

    git vim在rebase时经常崩溃并报如下错误
    git rebase vim Caught deadly signal SEGV解决方案:
    设置git的编辑器为notepad++(修改完后需关闭整个notepad++才可继续)

    1
    git config --global core.editor \ "'C:/Program Files (x86)/Notepad++/notepad++.exe'”

    查看本地rebase之前的提交记录

    1
    2
    //只在rebase的机器上能看到记录,从仓库拉下来的没有记录
    git reflog

    add 2018-02-09 15:12:25

    如何查看某次提交修改的文件有哪些

    1
    2
    3
    4
    # 查看从sha1开始最近 n次的提交改动了那些文件
    # 每个文件加了几行减了几行
    # git log sha1 --stat -n
    git log 0a79d5f811403766e05a9ca906a463de5e85c957 --stat -1

    以图表格式显示提交记录

    1
    2
    #以图表方式查看各分支之间的关系
    git log --graph --oneline

    比对最近几次已经commit代码改动内容

    1
    2
    3
    4
    # 想查看几次就在head后面该为几
    git diff head~1
    # 查看两次之间改动内容 也可以用sha1值
    git diff head~1 head~3
    文章目录
    1. 1. git log 命令
      1. 1.0.1. git log -n
      2. 1.0.2. git log –stat -n
      3. 1.0.3. git log –pretty=format:” “
  • 2. git Commit message
  • 3. git issues
  • 4. git branch
  • 5. git config
    1. 5.1. git仓库备份
    2. 5.2. git一次提交到两个仓库
  • 6. git 文件对比
    1. 6.1. git Tag
    2. 6.2. git patch
  • 7. 把gitbash的编辑器设置为其他文本编辑器
  • 8. 查看本地rebase之前的提交记录
  • 9. 如何查看某次提交修改的文件有哪些
  • 10. 以图表格式显示提交记录
  • 11. 比对最近几次已经commit代码改动内容