GIT实用指北

简介

  • Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
  • Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管
  • Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而开发的一个开放源码的版本控制软件

git常用命令

常用命令列表

git help
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   fetch      Download objects and refs from another repository
   grep       Print lines matching a pattern
   init       Create an empty Git repository or reinitialize an existing one
   log        Show commit logs
   merge      Join two or more development histories together
   mv         Move or rename a file, a directory, or a symlink
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects
   rebase     Forward-port local commits to the updated upstream head
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   show       Show various types of objects
   status     Show the working tree status
   tag        Create, list, delete or verify a tag object signed with GPG

复制代码

以上是通过githelp命令得出的所有常用的git操作符


命令详解

add

  • git add .   提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
  • git add -A   提交所有变化
  • git add -u   提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
  • git add -p   提交分布式,每次提交会提示是否提交
git add .
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
# Changed but not updated:
#   deleted:    delete-me

git reset

git add -u
git status

# Changes to be committed:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git reset

git add -A
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
#   deleted:    delete-me

复制代码

bisect

Git-bisect   用于通过二分查找来查寻版本的错误,一般用于大工程 详解

设定前后两个版本,一个为good, 一个为bad, 使用二分查找中间的版本,进行编译,看是否出现问题,如果没有,在该版本与之前设定的bad之间再进行二分;如果有错误,则在该版本与之前设定的good之间进行二分,分别设定了两个版本,一个good, 一个bad, 只要有一个good和一个bad设定完成,就出输出可能的中间版本,你可以将该版本checkout, 编译看是否有bug

$ git bisect start
$ git bisect bad                 # Current version is bad
$ git bisect good v2.6.13-rc2    # v2.6.13-rc2 was the last version
                                 # tested that was good
复制代码

branch

Git-branch   用于查看该工程存在的分支以及对分支进行操作的命令符

  • git branch   查看本地分支
  • git branch -a   查看远程分支与本地分支,会先列出本地分支
  • git branch -r   查看远程分支
  • git branch -d [branchName]   删除某个本地分支
  • git branch -d -r [branchName]  删除某个远程分支
  • git branch -m oldbranch newbranch   重命名本地的某个分支
  • git branch -v   查看各个分支最后一次提交
  • git branch –-merged   查看哪些分支合并入当前分支
  • git branch –-no-merged   查看哪些分支未合并入当前分支
$ git branch
  dev
  lyxy-snapshot-1.0.0
  master
  release
  wcxy-snapshot-1.0.0
* zhbx-snapshot-1.0.0

$ git branch -a
  dev
  lyxy-snapshot-1.0.0
  master
  release
  wcxy-snapshot-1.0.0
* zhbx-snapshot-1.0.0
  remotes/origin/HEAD -> origin/master
  remotes/origin/cyfw-snapshot-1.0.0
  remotes/origin/dev
  remotes/origin/lyxy-snapshot-1.0.0
  remotes/origin/master
  remotes/origin/release
  
$ git branch -r
  origin/HEAD -> origin/master
  origin/cyfw-snapshot-1.0.0
  origin/dev
  origin/lyxy-snapshot-1.0.0
  origin/master
  origin/release

$ git branch -v
  dev                 41400c0 [ahead 1] <x>修改BUG.
  lyxy-snapshot-1.0.0 c60ee6b Merge branch 'release'
  master              8385d99 [behind 18] 修改接口中参数没有加上company_id的SQL,去掉项目中多余文件
  release             54cac55 [behind 9] +(个人中心学习路径完成与未完成数量的统计)
  wcxy-snapshot-1.0.0 afefba1 [ahead 1] <+>中传网络学院的定制化修改
* zhbx-snapshot-1.0.0 a6f5cfd +(用户模块:课件完成百分比配置)  
复制代码

checkout

git checkout   最为常用的两种情形是创建分支和切换分支

  • git checkout [branch]   直接切换到指定分支,分支本身已存在的情况
  • git checkout -b branch-name origin/branch-name   从远程分支上拉下分支并切换到该分支
  • git checkout -b branch-name TagName   以某标签点为基础创建新分支
  • git checkout -b branchName   创建新分支,并切换到该分支。等于一次执行两条命令。创建新分支:git branch branchName,切换到新分支:git checkout branchName
  • git checkout . 放弃当前修改回退到当前分支的最后一次提交
//基于TAG v8.4.0 开出新分支并切换到该分支
$ git checkout -b tzcpa-snapshot-1.0.0 v8.4.0
Switched to a new branch 'tzcpa-snapshot-1.0.0'

复制代码

clone

git clone   用于克隆代码服务器上的代码到本地

  • git clone xxx.git   最原始的命令直接克隆代码服务器上最新的master分支代码
  • git clone -b [new_branch_name] xxx.git   clone时创建新的分支替代默认Origin HEAD(master)
  • git clone xxx.git "directName"   clone到指定目录
//克隆时候出现以下代码表示clone成功
$ git clone ssh://xxxx/2b/Android/mooc-Android-client
Cloning into 'mooc-Android-client'...
remote: Counting objects: 3516, done
remote: Finding sources: 100% (3516/3516)
remote: Total 3516 (delta 1041), reused 3514 (delta 1041)
Receiving objects: 100% (3516/3516), 29.12 MiB | 1.12 MiB/s, done.
Resolving deltas: 100% (1041/1041), done.
Checking connectivity... done.
Checking out files: 100% (3161/3161), done.
复制代码

commit

git commit   提交工作空间的修改内容到本地仓库中.需与git add联合使用

  • git commit 提交暂存区的代码到本地仓库,回车后输入注释然后再回车,用于注释多余一行的提交
  • git commit -m 'xxx' 提交暂存区的代码到本地仓库,m后面用引号,里面填写注释

diff

git diff   比较当前版本与对应的远程分支的区别

  • git diff   此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异 也就是修改之后还没有暂存起来的变化内容。
  • git diff --stat   显示简要的比较结果,只会显示出具体的增减行数,不会具体到代码行
  • git diff [branchName]   比较当前修改与另一个指定分支间的改动
  • git diff [branchName] -- [filePath]    比较当前分支的某个文件与指定分支的这个文件的改动
  • git diff [branchName] [branchName]   比较两个分支间的改动,可用head^ head代替前一个版本和当前版本
  • git diff [SHA1] [SHA2]   比较两个提交点间的改动,sha表示提交的changeId
  • git diff [branchName]...[branchName]   比较两个分支所有的改动

-- ps:所有的git diff模式都可以通过输入大写字母Q退出

//列举出从tzcpa-snapshot-1.0.0到mater分支所有改动的简要模式
$ git diff tzcpa-snapshot-1.0.0...master --stat
 filters/dev/system-config.properties               |   32 +-
 .../com/zxy/mobile/base/constant/Constants.java    |    3 +
 .../mobile/base/constant/SystemConfigConstant.java |    5 +-
 .../mobile/base/service/impl/BaseServiceImpl.java  |   11 +
 .../com/zxy/mobile/foundation/util/StringUtil.java |    6 +-
 .../mobile/listener/SaveLoginRecordListener.java   |   36 +-
 .../service/ask/service/impl/AskServiceImpl.java   |   15 +-
 .../service/impl/CommunityServiceImpl.java         |    8 +-
 .../community/service/impl/TrendsServiceImpl.java  |   16 +-
 .../course/service/impl/CourseServiceImpl.java     |    4 +-
 
//列举出从tzcpa-snapshot-1.0.0到mater分支所有改动,就会列举出详细的区别,+表示新增内容,-表示删减的内容
$ git diff tzcpa-snapshot-1.0.0...master
diff --git a/filters/dev/system-config.properties b/filters/dev/system-config.properties
index 3333d2a..0d4efeb 100644s/CommonUtils.java     |  117 +-
--- a/filters/dev/system-config.properties.java     |    2 +-
+++ b/filters/dev/system-config.propertiesss        | 6364 ++++++++++++++++++++
@@ -1,37 +1,44 @@share/css/style.css                |  140 +-
-jdbc.url=jdbc:mysql://10.162.61.11:3306/zxystudentdb_yy
+#db
+jdbc.url=jdbc:mysql://121.41.24.23:3306/zxystudentdb
 jdbc.user=zxystudentadmin
 jdbc.password=dreamtech
复制代码

fetch

git fetch   取回branch在服务器上的最新状态

  • git fetch   取回所有分支的最新代码到本地
  • git fetch [branchName]   取回某个分支的最新代码到本地
  • git fetch -p   取回代码服务器上的最新分支库
$ git fetch -p
remote: Counting objects: 265, done
remote: Finding sources: 100% (131/131)
remote: Total 131 (delta 52), reused 129 (delta 52)
Receiving objects: 100% (131/131), 125.86 KiB | 0 bytes/s, done.
Resolving deltas: 100% (52/52), completed with 34 local objects.
From ssh://xxxxx:29418/2b/xxxx-xxx-new
   9daaa54..67731b6  ansp-snapshot-1.0.0 -> origin/ansp-snapshot-1.0.0
   00cc0ce..73179e5  dev        -> origin/dev
   7873606..11ebdbc  master     -> origin/master
   7873606..9d7fd98  release    -> origin/release
复制代码

grep

git grep   git自带的检索器,可以方便查找

  • git grep xxxx   查找出所有带xxxx的文件以及该字符在这个文件的位置
  • git grep -n xxxx   查找出所有带xxxx的文件以及该字符在这个文件的具体位置,精确到行数
  • git grep -c xxxx   统计这个字符在各个文件出现的次数
  • git grep --name-only xxx   查找出所有带xxxx字符的文件的名称
  • git grep xxxx [TagName]  在某个标记点查找带XXXX字符的文件
  • git grep -e 'xxxx' --and -e 'hhh'  查找出一行既包含xxx又包含hhh的文件
  • git grep --all-match -e 'xxxx' -e 'hhh'  查找出一行包含xxx或者包含hhh的文件
//查找userInfo
$ git grep userInfo
src/main/java/com/zxy/mobile/service/user/service/impl/UserServiceImpl.java:            User userInfo = User.dao.findFirs
//显示行数
$ git grep -n userInfo
src/main/java/com/zxy/mobile/service/user/service/impl/UserServiceImpl.java:456:                User userInfo = User.daos
//统计出现的字数
$ git grep -c userInfo
src/main/java/com/zxy/mobile/service/user/service/impl/UserServiceImpl.java:28
//显示出现该字符的文件名
$ git grep --name-only userInfo
src/main/java/com/zxy/mobile/service/user/service/impl/UserServiceImpl.java
//基于标签版本8.4.0进行搜索
$ git grep userInfo v8.4.0
v8.4.0:src/main/java/com/zxy/mobile/service/user/service/impl/UserServiceImpl.java:             User userInfo = User.dao
//关联查找,因为没有符合条件的文件
$ git grep -e log --and -e hello
src/main/webapp/share/index.html:                       console.log('hello')
//或查找
$ git grep --all-match -e hello -e log
src/main/webapp/share/index.html:              src/main/webapp/share/index.html:                       <div class="weui_dialog">
src/main/webapp/share/index.html:                               
<div class="weui_dialog_hd">
src/main/webapp/share/index.html:                                       
<strong class="weui_dialog_title">温馨提示</strosrc/main/webapp/share/index.html:                               
src/main/webapp/share/index.html:                               <div class="weui_dialog_ft">
src/main/webapp/share/index.html:                                       <a href="javascript:void(0);"    
src/main/webapp/share/index.html:                       console.log("data:" + data);
src/main/webapp/share/index.html:                               src/main/webapp/share/index.html:                       console.log('hello')
复制代码

blame

git blame   可以打印出git的提交记录,精确到行,戏称'缉凶神器'

  • git blame [fileName]

转载于:https://juejin.im/post/5a5c80806fb9a01cbc6e5ff7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值