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

原文地址:https://www.cnblogs.com/zndxall/p/8484194.html