Git 学习之命令详解

git 官网地址

Git学习之命令详解

  • 以下是在各种情况下使用的常见Git命令:
    // 启动工作区
    clone      将远程版本库克隆到新目录
    init       创建一个空Git存储库,或者重新编译现有的Git库
    // 处理当前更改
    add        添加到暂存区 下面有详解
    mv         移动或重命名文件、目录或符号链接
    reset      重置为指定状态
    rm         从工作树和索引中删除文件
    // 检查历史记录和状态
    bisect     使用两分法搜索查找引入错误的提交
    grep       检索文件中的文本内容
    log        显示提交日志
    show       显示各种类型对象的相关信息
    status     显示工作树状态
    // 成长,标记和调整你的共同历史
    branch       分支列表、创建或删除分支
    checkout     切换 创建分支
    commit       将更改记录提交到存储库
    diff         显示工作区和临时区之间的更改
    merge        合并将两个或多个提交历史合并
    rebase       衍合指定分支到当前分支
    tag          创建、列出、删除或验证的标记对象
    // 协作
    fetch     从远程库获取代码
    pull      从远程库获取代码快速合并
    push      推送到远程库
  • 详解:
    git clone
    -n, 不检出Git库中的active branch
    -o new_origin, 使用new_origin,而不使用默认的origin,作为跟踪分支的upstream所在库
    -b new_branch, 设置本地的active branch,而非默认的master branch
    --single-branch, 只检查一个branch,要么是默认的master,要么是-b new_branch指定的new_branch
    --recursive, 在本地初始化Git库中的所有模块
    git clone 命令默认的只会建立master分支 // 特别提醒
    git clone -b [new_branch_name]  仓库地址 // clone时创建新的分支替代默认origin/master
    git clone 仓库地址  // 从远程库拉到本地 文件名为仓库名 如 git@gitee.com:momingsixiali/git.git 拉到本地文件名为 git
    git clone 仓库地址 "指定目录" // 拉到本地文件名 为 指定的目录 如 git clone git@gitee.com:momingsixiali/git.git zhiding 本地文件名为 zhiding

    git add

    git add -u   将文件的修改、文件的删除,添加到暂存区。
    git add .    将文件的修改,文件的新建,添加到暂存区。
    git add -A   将文件的修改,文件的删除,文件的新建,添加到暂存区。
    // 工作中一般是用到 git add . 或者 git add -A
    git add -A    相对于git add -u命令的优点 : 可以提交所有被删除、被替换、被修改和新增的文件到数据暂存区,而git add -u    只能操作跟踪过的文件
    git add -A    等同于  git add -all

    git mv

    git mv demo demo1 // 不会破坏git历史 等效于 如下:
    mv demo demo1 // 修改文件名
    git add demo1 // 添加到暂存区
    git rm demo // 更改demo的提交历史到 demo1

    git reset

Git 学习之命令详解
git commit 每一次提交都会创建一个索引 如上图

git reset --hard // 危险命令 分支的指针都指向上一个提交  无法找回 移动 HEAD->更新索引->更新暂存区工作区
git reset --soft  //  分支的指针都指向上一个提交 本次提交还在 只是不显示
git reset --mixed  //  分支的指针都指向上一个提交 只是回退暂存区 工作区还在 推荐使用 也是 git 默认

git rm

git rm demo // 等效于 如下:
rm -rf demo
git add demo

git bisect

git bisect start [终点] [起点]  // 使用方法 如git bisect start [1] [100] 切换到这段范围正当中的那一次提交就是第 50次提交
git bisect good  //说明 标识本次提交(第50次)没有问题 后自动切换到后半段的中点(第75次提交) 
git bisect bad // 说明 50 - 75 中间有问题 后自动切换到(第62次提交) 不断重复这个过程,直到成功找到出问题的那一次提交为止 返回
// 648308 is the first bad commit
git bisect reset // 退出,回到最近一次的代码提交 改 BUG

git grep

git grep login // 查找该仓库里所有使用'login'的地方 相当于 Linux中的 grep 返回如下
    app/Http/Controllers/Auth/LoginController.php:     * Where to redirect users after login.
    app/Http/Middleware/Authenticate.php:            return route('login');
    resources/lang/en/auth.php:    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
git grep -n login // 显示 行号 
   app/Http/Controllers/Auth/LoginController.php:24:     * Where to redirect users after login.
   app/Http/Middleware/Authenticate.php:18:            return route('login');
   resources/lang/en/auth.php:17:    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
git grep --name-only login // 只显示文件名
   app/Http/Controllers/Auth/LoginController.php
   app/Http/Middleware/Authenticate.php
   resources/lang/en/auth.php
git grep -c login // 查看每个文件里有多少行匹配
   app/Http/Controllers/Auth/LoginController.php:1
   app/Http/Middleware/Authenticate.php:1
   resources/lang/en/auth.php:1
git grep login 5027c63 // 指定提交索引 找
git grep -e 'name' --and -e email // 同时满足 name 和 email 
   app/Models/User.php:        'name', 'email', 'password',
   composer.lock:            "name": "egulias/email-validator",
git grep --all-match -e 'name' -e email 97bacf05d4 // 满足name 或 email 
git grep -e 'name' --and  -e  -e MAX .
git grep -e 'password' --and ( -e name -e email ) //  同时满足 password 和 (name 或者 email)
// 可组合使用
git grep  -n -e 'password' --and -e email 97bacf05d4

git log
ps : 一下命令参数可自由组合 有的会失效 如 --all 和 指定提交 -all 生效

git log --all // 所有分支
git log --graph // 演化历史 包括所有分支
git log --oneline  // 简化输出
    729399c (HEAD -> dev) 0
    736d8f6 (origin/dev) 邮箱验证功能
    894f6ae 注册登录
    6483089 添加忽略文件
git log --stat  // git log 的基础上输出文件增删改详情 返回如下
    commit 729399ce26607297d87415ab844ca247137b94f2 (HEAD -> dev)
    Author: moming <15516319695@163.com>
    Date:   Thu Dec 26 23:34:57 2019 +0800

        0

     app/Models/UserAddress.php                                            | 10 ++++++++++
     config/session.php                                                    |  4 ++--
     database/factories/UserAddressFactory.php                             |  9 +++++++++
     database/migrations/2019_03_27_155837_create_user_addresses_table.php | 31 +++++++++++++++++++++++++++++++
     public/js/app.js                                                      | 22 +++++++++++-----------
     yarn.lock                                                             | 38 +++++++++++++++++++-------------------
     6 files changed, 82 insertions(+), 32 deletions(-)
git log -p // 显示每个commit具体修改的内容,输出的形式以diff的形式给出
git show // 同git log -p输出类似,不同在于show只显示一个commit的内容,如果不指定commit hash, 它默认输出HEAD指向commit的内容
git shortlog // 显示汇总信息,以用户进行分类 返回如下
    moming (6):
          Merge branch 'dev' of https://github.com/wujianan/shop into dev
          添加忽略文件
          注册登录
          邮箱验证功能
    momingsixiali (1):
          项目初始化
  git shortlog -s // 显示用户 提交次数 按提交时间排序
  git shortlog -n // 显示用户 提交次数 进行倒序排列
git log  --author=moming // 显示 moming 的提交, 限定输出给定的用户
git log -2 // 限制 显示输出的数量 本次输出 2个
git log --after '12-22-2019'  //  --after和--before 限定指定日期的log
git log --decorate --oneline // 显示对应commit所属的branch和tag信息

git show

git show 72939  // 显示指定提交的相关信息
git show 72939^{tree} //显示指定提交的目录结构
git show v1  // 显示指定 tag 

git status

git status // 查看当前工作区和暂存区文件的状态

git branch git checkout

git branch // 查看本地分支
git branch -a // 查看 本地 和远程 所有分支
git branch new_branch // 创建新分支
git branch --delete 分支名 // 删除 分支
git checkout 分支名  //切换分支
git checkout -b 分支名 //基于本分支创建并切新信分支
git push origin -u 分支名 // 将本地分支,推送到远程库

git commit

git commit -m '提交信息'  //  添加提交信息 
git commit -a -m '提交信息'  //  还没有执行add命令的修改一起提交
git commit --amend // 修改上一次的提交信息

git diff

git diff // 显示工作区 和暂存区的 不同
git diff --stat // 显示简单的 比较信息
git diff master // 查看当前分支 与 master 分支的 不同之处
git diff SHA1 SHA2 // 比较两个历史版本之间的差异

git merge 和 git rebase
rebase
Git 学习之命令详解

git merge dev // 当前的分支合并dev 没冲突直接合并 有冲突 会提醒 解决后 重新提交 分支中新的合并提交(merge commit)将两个分支的历史连在了一起 现有的分支不会被更改
git rebase dev // 当前的分支合并dev 没冲突直接合并 有冲突 会提醒 解决后 重新提交 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交 *****黄金法则   绝不要在公共的分支上使用它

git fetch 和 git pull

git fetch 和 git pull  // 功能是大致相同,都是起到了更新代码的作用 git pull看起来更像git fetch + get merge 建议使用 git fetch + get merge   git pull 一旦代码有问题,很难找到出错的地方

git push

git push <远程主机名> <本地分支名>:<远程分支名> // 将本地分支的更新,推送到远程
git push origin :master // 危险 删除远程仓库的分支 等效于 git push origin --delete master
git push //当前分支只有一个追踪分支 可省略 <远程主机名> <本地分支名>:<远程分支名>
git push -u origin master // 将本地的master分支推送到origin远程,同时指定origin为默认,后面就可以不加任何参数使用git push

特别感谢:
博客平台提供-社区
更多关于git fetch 和 git pull
git rebase 使用加图解

git
本作品采用《CC 协议》,转载必须注明作者和本文链接
附言 1  ·  4年前

ps: 继续完善中

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

git grep 很实用

为什么不要在公共的分支上使用 git rebase

4年前 评论
莫名私下里 (楼主) 4年前
莫名私下里 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!