zoukankan      html  css  js  c++  java
  • git 常用命令详解

    1.git 提交信息模板配置:http://blog.csdn.net/normallife/article/details/51764399

    2.git 解决文件冲突、强制更新:http://blog.csdn.net/ccboy2009/article/details/50810694

    3.常见的git 命令

    (1)git log

      (1.1)显示一行日志,包含commit id, message 描述,tag等  

       command:   git log --pretty=oneline --abbrev-commit  或者git log  --decorate --pretty=oneline

      (1.2)查看最近n次的改动: git log n,最后一次:git log -1

      (1.3)查看某个文件的提交改动:git log $filename  (备注:本能查看文件夹的改动)

          (1.4)   git log --stat 显示commit历史,以及每次commit发生变更的文件

          git show --oneline --stat $commitid  或者直接git show  $commitid 查看改动

      (1.5)git log 查看提交历史记录

      (1.6)git log --oneline  或者 git log --pretty=oneline 以精简模式显示

      (1.7) git log --graph 以图形模式显示

      (1.8)git log --stat 显示文件更改列表

        (1.9)git log --author='name' 显示某个作者的日志

      (1.10)git log -p filepath 查看某个文件的详细修改

          (1.11). git log -L start,end:filepath 查看某个文件某几行范围内的修改记录

           (1.12)git log --stat commitId  或者 git show --stat commitId 查看某一次提交的文件修改列表 

       (1.13)git log branch1 ^branch2  比较两个分支的差异,分支branch1有的提交,但是在分支branch2没有

                           git log branch1 ..branch2  查看branch2比branch1分支多出来的提交,显示出来的是branch2比branch1多出来的提交

                          git log --left-right branch1...branch2 显示每个提交在哪个分支上,根据 --left-right配置,显示commit >是在branch2上的提交,commit> 是在分支branch1上的提交,比如git log --left-righ develop...master,显示如下:

    第一个提交是在master上的,第二个提交是在develop上的

    (2)git tag

      (2.1)新建tag: git tag  $tag_name 

      (2.2)删除远端tag: git push origin --delete $tag_name

      (2.3)删除本地tag:git tag -d $tag_name

      (2.4)多个tag按照提交时间排序:git tag --sort=committerdate

    (3)git branch

      (3.1)创建并切换到新建分支: git checkout -b $branch_name  remotes/origin/master

         推送新建的分支:git push origin $branch_name

      (3.2)查看分支详细信息: git branch -av

      (3.3)删除远端分支:git checkout remote_branch-name  ; git push origin --delete $branch_name

      (3.4)删除本地分支:git branch  -D $branch_name

    (4)git push

      (4.1) 推送分支的提交经过gerrit:git push origin HEAD:refs/for/$work_banch

      (4.2)推送分支的提交不经过gerrit: git push origin $work_branch

      (4.3)推送新建的分支: git push origin $branch_name

      (4.4)推送tag:git push origin $tag_name

      (4.5)推送所有的tag: git push origin --tags

    (5)git reset 

      (5.1)回退到执行的conmit_id: git reset   $commit_id

      (5.2)回退多次的修改,比如三次: git reset --hard HEAD~3

      (5.3) git reset  --soft与git reset --hard 的区别

    git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;比如某次提交因为邮箱设置错误导致提交不上去,此时可以直接使用git reset --soft回退到前一个commit id,修改好邮箱,在执行git status 发现修改还在,直接使用git commit -s 就可以再次提交了。

    git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;所有的修改都会被丢掉,执行git status 显示没有改动,如下:

    (6)git add 

      (6.1)追踪单个文件: git add $file_path/$file_name

      (6.2)追踪所有改动: git add .

    (7)git commit 

     (7.1)添加改动的描述信息:git commit -s 

     (7.2)修改提交信息描述: git commit --amend 

      针对gerrit来说,会生成新的change_id,如果找不到提交失败的原因,把已有的change_id 删掉试试,用该命令生成一个新的change_id

    (8)git config

      (8.1)设置全局用户名: git config --global user.name "helen"

      (8.2)设置邮箱: git config --global user.email "helen@example"

         (8.3)设置全局编译方式: git config --editor vim

      (8.4)查看配置:git config --list

    (9)git clone

      (9.1)克隆代码(ssh):git clone ssh://gerrit@192.168.8.250:29418/test

      (9.2)克隆代码(http):git clone http://gerrit@192.168.8.250:8088/a/test

      (9.3)克隆代码with commit-msg hook:git clone ssh://gerrit@192.168.8.250:29418/android/standard/test && scp -p -P 29418 gerrit@192.168.8.250:hooks/commit-msg test/.git/hooks/

    (10)查看.git/index的内容:git ls-files --stage

    (11)git show $commitid  查看$commitid提交修改的内容

    (12)tig 直观查看提交记录

      不同平台的安装参考:https://blog.csdn.net/lcyaiym/article/details/77799813

    (13)把分支A的commit_id 打到B分支上

      git cherry-pick $commit_id 

    (13.1)在新的分支上执行,git cherry-pick $commit_id ,如果报错,那么然执行git status 查看冲突的文件,然后git add file,然后git commit -s ,然后git push

    (13.2)批量cherry-pick:

    • Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
    • git cherry-pick <start-commit-id>..<end-commit-id>
    • git cherry-pick <start-commit-id>^..<end-commit-id>

    前者表示把<start-commit-id>到<end-commit-id>之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
    后者有"^"标志的表示把<start-commit-id>到<end-commit-id>之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
    其中,<start-commit-id>到<end-commit-id>只需要commit-id的前6位即可,并且<start-commit-id>在时间上必须早于<end-commit-id>

    [备注:git cherry-pick $commit_id来讲A分支的commit_id也放到B分支的前提是,这个commit_id必须在A分支本地有,不然会报错]

     (14)基于某个commitid标记tag:

    git tag -a <tag名> <commit对应的hash码>

    (15)撤消未跟踪文件

      git clean -dxf   :清除所有未跟踪文件,包括纳入ignored的文件。如果要保留ignored的文件修改,使用参数-df

    (16)合并多个提交

      git rebase -i HEAD~2  ,合并两个提交,参考:https://www.cnblogs.com/tocy/p/git-rebase-merge-commit.html

    (17)git merge 合并分支

            git merge develop:表示merge develop分支到当前分支,如果提交时报错:have no new changes,可添加 --no-ff参数解决。

    (18)git stash :保存变更

           参考我的另一篇博客:https://www.cnblogs.com/zndxall/p/9586088.html

    (19)比如develop分支落后于master分支,develop最新节点标记了tag_r1.0,develop合入master后,在master分支上执行git checkout tag_r1.0,就只能到看到这个tag之前的提交,master相对多出来的此时是找不到的。

    (20)git diff 

      (20.1)比较两个分支的不同: git diff branch1 branch2

      (20.2)比较本地分支和远程分支的不同: git diff branch1 remotes/origin/branch1

              (20.3)比较两个提交之间的差异: git diff commit1 commit2

         (20.4)  diff branch1 branch2 文件名(带路径)   //显示指定文件的详细差异

             (20.5)git diff develop master --stat  两个分支的差异文件列表

    (21)获取最后一次提交的commit_id

             git rev-parse HEAD

           获取前七位:git rev-parse --short HEAD

  • 相关阅读:
    【BZOJ3506】[CQOI2014] 排序机械臂(Splay)
    2019年1月训练记录(1.01~1.31)
    再学点分治——动态点分治
    【洛谷5113】Sabbat of the witch(毒瘤分块)
    【洛谷1501】[国家集训队] Tree II(LCT维护懒惰标记)
    初学后缀自动机
    【洛谷3950】部落冲突(LCT维护连通性)
    【BZOJ2049】[SDOI2008] Cave 洞穴勘测(LCT维护连通性)
    LCT入门
    【BZOJ4650】[NOI2016] 优秀的拆分(后缀数组)
  • 原文地址:https://www.cnblogs.com/zndxall/p/8484194.html
Copyright © 2011-2022 走看看