git命令整理(持续更新)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qwkxq/article/details/82805702

入门

安装Git

Git下载

命令

  • 预配置

    • 查看版本号
          git --version 版本号
      
    • 查看git命令文档
      git help git命令 查看git命令文档(例如: git help log))
      
    • 配置信息
          git config --system --list 查看所有用户范围的公共属性(/etc/gitconfig,windows在[git安装目录]/etc/gitconfig)
          git config --global --list 查看当前用户范围的公共属性(~/.gitconfig)
          git config --list 查看当前项目范围的公共属性([项目路径]/.git/config)
          git config [--global|--system] key value 设置配置信息key,value,例如配置用户信息
      

      使用示例

          git config --global user.name "test" 标记自己名字是"test"
          git config --global user.email "[email protected]" 标记自己邮箱是"[email protected]"
          // 上述配置信息,可以在提交记录中看到
          
          /*
          公司内网https的SSL证书未经过第三方机构签
          署,直接操作Git就会报错,需要设置忽略证书,
          即sslVerify。一般情况下,通过执行如下命令进行设置
          */
          git  config  --global  http.sslVerify "false"
      
    • ssh连接仓库
          ssh-keygen -t rsa -C "[email protected]" 使用[email protected]为依据生成密钥
      

      生成的密钥文件保存在~/.ssh目录,切换到该目录,复制公钥文件(id_rsa.pub)内容,粘贴到仓库对应配置处。
      以github为例,操作如下:

          点击右上角 "Account Settings" 设置图标
          点击左侧 "SSH Keys"
          点击 "Add SSH key"
          粘贴你的密匙到 "Key" 文本区
          点击 "Add key"
          确认操作输入你的 GitHub 密码
      

      测试是否配置成功

          ssh -T [email protected]
      

      -T表示强制客户端以交互模式工作,可以提高执行速度

      第一次输入,直接输入yes即可.

          The authenticity of host 'github.com (207.97.227.239)' can't be established.
          RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
          Are you sure you want to continue connecting (yes/no)?
      

      如果验证成功,GitHub会提示

          Hi you_username! You've successfully authenticated, but GitHub does not
          provide shell access.
      
  • 管理项目

    • 添加/提交
          git init (git 初始化)
          git status (查看git管理的状态)
          git add (将文件添加到git跟踪,文件被放入暂存区,可以提交或者存储到远程主机)
          git commit ( 提交到版本库中)
          git log (查看git的日志)
      
    • 分支
          git branch (查看所有分支)
          git branch 分支名 (创建分支)
          git checkout 分支名 (切换到该分支)
          git checkout -b 分支名 (创建并切换到该分支)
          git branch -d 分支名 (删除已经合并的分支)
          git branch -D 分支名 (强制删除,不管有没有合并)
      
    • 藏匿区

      藏匿区用于保存当前所有文件的状态,以便将来还原到该状态,提交会使藏匿区失效。

           git stash (保存当前分支未提交的工作状态到"藏匿区"以便将来可以回到这个工作状态)
           git stash list (查看该分支藏匿区保存的所有工作状态)
           git stash apply 工作状态名 (回到某个工作状态)
           git stash drop 工作状态名 (删除某个工作状态)
      

      使用示例

      在master分支修改一个文件test.txt(此时test.txt没有纳入版本控制(因为还没执行git add)),执行:

      git stash

           Saved working directory and index state WIP on master: 50c9371 fixed a bug
      

      git stash list

           stash@{0}: WIP on master: 50c9371 fixed a bug
      

      可以看到当前文件状态已经被保存到藏匿区“stash@{0}”中,现在将“test.txt”纳入版本控制,并切换分支v1.0

      git add test.txt
      git checkout v1.0

      当v1.0分支任务结束,又可以切回master,恢复藏匿区,继续开发

      git checkout master
      git stash apply stash@{0}

    • 本地与远程仓库交互
      • 远程仓库管理

        git remote [-v | --verbose]
        git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>
        git remote rename <old> <new>
        git remote remove <name>
        git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
        git remote set-branches [--add] <name> <branch>…​
        git remote get-url [--push] [--all] <name>
        git remote set-url [--push] <name> <newurl> [<oldurl>]
        git remote set-url --add [--push] <name> <newurl>
        git remote set-url --delete [--push] <name> <url>
        git remote [-v | --verbose] show [-n] <name>…​
        git remote prune [-n | --dry-run] <name>…​
        git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…​]

        • 常用命令
              git remote add 远程仓库名(我们一般使用origin) 仓库URL (添加仓库)
              git remote remove 远程仓库名 (删除仓库)
              git remote rename 远程仓库名 新仓库名 (重命名仓库)
              git remote set-url --add --push 仓库URL (添加push时提交的url,这条命令可以实现一次push到多个仓库)
          
      • 拉取远程代码

        git pull [options] [<repository> [<refspec>…​]]

        git pull 等同于“git fetch <远程主机名> <分支名>” + “git merge 远程仓库名/分支名”的结合

        • 常用命令
              
          
      • 推送本地代码到远程

        git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose] [-u | --set-upstream] [--push-option=<string>] [--[no-]signed|--signed=(true|false|if-asked)] [--force-with-lease[=<refname>[:<expect>]]] [--no-verify] [<repository> [<refspec>…​]]

        • 常用命令
              git push -u 远程仓库名 本地分支名:远程分支名 (将本地分支代码推送到远程分支并建立跟踪)
          

          -u 表示参数建立追踪。 这样git status 时会显示本地分支和远程分支的偏离情况
          如果本地分支名与要推送的远程分支名一样,则远程分支名可以省略:git push -u 远程仓库名 本地分支名
          如果想删除远程分支,则省略本地分支名,然后在前面加上“:":git push -u 远程仓库名 :远程分支名 等同于:git push origin --delete 远程分支名

          如果push的时候,已经有人在该分支上提交了代码,则push会失败,此时需要先把更新抓取到本地在合并到项目中,才能再次push。(pull 或者 fetch+merge)

日志

git log [<options>] [<since>..<until>] [[--] <path>...]

如果不带任何参数,列出所有历史记录,最近的排在最上方,显示提交对象的哈希值-作者-提交日期-和提交说明等。
通过Page Up、Page Down、↓、↑、Enter来控制显示。按q退出历史记录列表。

参数说明

  • 显示

    • 基础参数
          --stat 显示修改文件列表及文件增删改行数(修改1行记为1个“+-”)
          --shortstat 只统计--stat 最后的添加、删除行数
          -p 显示修改文件的具体修改内容是哪些
          --graph 使用ASCII符号绘制分支合并历史
          --oneline 一行显示,只显示哈希值()和提交说明
          
          --decorate 标记会让git log显示每个commit的引用(如:分支、tag等) 
          --simplify-by-decoration 只显示被branch或tag引用的commit
          
          --name-only 在有文件修改的提交记录后面显示修改文件列表
          --name-status 不仅显示文件列表,还显示文件状态(A.添加、M.修改、D.删除)
          --relative-date 使用较短的相对时间显示(例如:"two weeks ago")
      

      使用效果:

      git log --shortstat

          commit 7759193b639feea86c32a4a53081f3325d9c9cfd (v1.0)
          Author: test <[email protected]>
          Date:   Thu Sep 20 15:08:45 2018 +0800
          
              update v1.0.txt for a new function
          
           1 file changed, 3 insertions(+), 1 deletion(-)
      

      git log --stat -p

          commit 7759193b639feea86c32a4a53081f3325d9c9cfd (v1.0)
          Author: test <[email protected]>
          Date:   Thu Sep 20 15:08:45 2018 +0800
          
              update v1.0.txt for a new function
          ---
           v1.0.txt | 4 +++-
           1 file changed, 3 insertions(+), 1 deletion(-)
          
          diff --git a/v1.0.txt b/v1.0.txt
          index 94e938d..dfadc35 100644
          --- a/v1.0.txt
          +++ b/v1.0.txt
          @@ -1 +1,3 @@
          -111111111111111111111111
          \ No newline at end of file
          +111111111111111111111111
          +
          +22222222222222222222222
          \ No newline at end of file
      

      git log --oneline --graph --name-status

          *   5949acc (HEAD -> master) merge v1.0 branch'
          |\
          | * 7759193 (v1.0) update v1.0.txt for a new function
          | | M   v1.0.txt
          | * 4ac8cdd only v1.0.txt
          | | D   fix.txt
          | | D   test.txt
          | * 666472f add v1.0 file
          | | A   v1.0.txt
          * |   078799f merge file
          |\ \
          | * | 0b3d607 (fix) delete test.txt
          | |/
          | |   D test.txt
          | * 5817d19 add fix file
          | | A   fix.txt
          * | 1d69a16 merge v1.0
          | | A   fix.txt
          * | bfa5865 upldate 88888888888
          |/
          |   M   test.txt
          * ed68942 init file
            A     test.txt
      
    • 格式化参数

      格式化输出日志使用 --pretty 参数,其值有:--pretty=(oneline|short|medium|full|fuller|email|raw),默认输出格式取值是:medium

          --pretty=oneline 基本和--oneline一样,不过commitId是长文本格式
          --pretty=format:"":自定义日志显示格式,取值有:
              %H  提交对象(commit)的完整哈希字串
              %h  提交对象的简短哈希字串
              %T  树对象(tree)的完整哈希字串
              %t  树对象的简短哈希字串
              %P  父对象(parent)的完整哈希字串
              %p  父对象的简短哈希字串
              %an 作者(author)的名字
              %ae 作者的电子邮件地址
              %ad 作者修订日期(可以用 -date= 选项定制格式)
              %ar 作者修订日期,按多久以前的方式显示
              %cn 提交者(committer)的名字
              %ce 提交者的电子邮件地址
              %cd 提交日期(可以用 -date= 选项定制格式)
              %cr 提交日期,按多久以前的方式显示
              %s  提交说明
              %d  关联分支名(ref名称)
              
              作者和提交者的区别不知道是啥?
              
              作者与提交者的关系:作者是程序的修改者,提交者是代码提交人(自己的修改不提交是怎么能让别人拉下来再提交的?)
              其实作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人。所以,当你为某个项目发布补丁,
              然后某个核心成员将你的补丁并入项目时,你就是作者,而那个核心成员就是提交者(soga)
              
              %C 设置显示颜色和字体,这个参数要配置上面的参数一起使用。
              
              有两种使用方式:[%C颜色]格式化参数 或者 [%C(字体 颜色)]格式化参数
                  %Creset 重置颜色
                  %Cred	切换到红色
                  %Cgreen	切换到绿色
                  %Cblue	切换到蓝色
                  %C(bold blue) 加粗蓝色
              
              例如
              "%Cred%h" 用红色显示简短的commitId;
              "%Creset -" 用默认颜色显示“-”;
              "%C(yellow)%d" 用黄色显示关联分支名;
              "%C(bold blue)%an" 作者名字蓝色加粗
      

      format显示内容中出现日期的格式使用--date参数定制,和--pretty一样,它有几个默认值
      --date= (relative|local|default|iso|rfc|short|raw),也可以使用format自定义格式。

  • 过滤

    • 常用过滤条件

      按数量

          git log -n 5:显示前5条记录           
      

      按日期

          git log --after="2014-7-1" 查看“2014-7-1”后提交的记录
          git log --before="2014-7-1" 查看“2014-7-1”前提交的记录
      

      按提交者姓名(或者邮箱)

          git log --author="test" 查找提交者姓名或者邮箱包含“test”的记录
          
          加上“-i”可以忽略大小写匹配
      

      按提交描述

          git log --grep="hello" 查找提交描述包含“hello”的记录
          
          如果想同时使用 --author 和 --grep,还要附加一个“--all-match”参数
      

      按版本文件

          git log -- ./subProject/src/main/java/com/test/mapper/testMapper.xml
      

      -- 在前表示按照文件查找(必须完整路径), -- 在后表示按分支查找
      按文件内容

          git log -S "hello" 查看所有版本文件中包含“hello”的提交记录             
          git log -G "w+" 查看所有版本文件中包含字母的提交记录(正则匹配)             
      

      按分支范围

          git log branch1..branch2 查看branch2有并且branch2没有的提交记录
          git log branch1...branch2 查看branch2或者branch2的提交记录
      

      按merge提交

          git log  --no-merges 查看不是merge commit的记录
          git log  --merges 只看merge commit记录
      

      按标签(tag)

          git log testTag1 查看testTag1之后提交的记录
          git log testTag1..testTag2 查看testTag1到testTag2之间的记录,不包括testTag1
      

      按commitId/shortCommitId

          git log commitId    在commitId之前提交的记录
          git log commitId1 commitId2 查看commitId1和commitId2之间的提交记录
          git log commitId1..commitId2 查看commitId1和commitId2之间的提交记录,但不包括commitId1
      

      commitId 可以用HEAD[[^][~num]]代替

      HEAD代表最新提交的commitId
      HEAD~1代表HEAD记录的前1条commitId ,HEAD~2代表HEAD记录的前2条commitId …以此类推。
      HEAD^ 等同于 HEAD~1。

猜你喜欢

转载自blog.csdn.net/qwkxq/article/details/82805702