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操做符javascript


命令详解

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   用于经过二分查找来查寻版本的错误,通常用于大工程 详解css

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

$ 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   用于查看该工程存在的分支以及对分支进行操做的命令符java

  • 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   最为经常使用的两种情形是建立分支和切换分支mysql

  • 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

  • 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联合使用web

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

diff

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

  • 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退出bash

//列举出从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]
相关文章
相关标签/搜索