SlideShare a Scribd company logo
git攻略

        by 李春城
chuncheng.li@dianping.com
git基本概念

          暂存区
          (stage)




 暂存区:为了更高效,更快速的完成工作
 稍后具体介绍各个命令的时候在介绍这三个的原理
目   • git前奏

录   • git基本概念
      • 配置、初化化
      • 基本命令
      • 暂存区
      • 检出、重置

    • git进阶
      • 冲突解决
      • 分支
      • 标签、里程碑


                 3
git

前          远程

奏          办公




      重置   爱上
                 .git目录
      提交
           git



           每日

           备份
配置:git config
配     git config –-system key.value {/etc/config} 优先级最低
置     git config –-global key.value {~/.gitconfig}

文     git config key.value {.git/config} 优先级最高

件     一般的配置项:
         user.name
         user.email
         alias.别名
             git config alias.ci “commit –u”
         color.ui true
      git config –e –-global
      git config --unset key.value

                           在哪可查看远程版本路径?
git支持的协议
初      ssh(scp)githttp(s)地地协议

始   git init

化   git clone <repository> <local directory>
       文件+版本库均检出,是一个对等工作区,只能Pull,不能push
版   git clone –bare <repository> <local directory.git>
本      只检出版本库(祼库)

库   git clone –mirror <repository> <local directory.git>
       与bare区别:在<repository>可以fetch <local repository>



         注意:创建一个祼版本库后,第一次用git push会报错,因为远程
         版本库还没有任何分支,所以第一次提交命令后面要跟上一个分支
         号

         eg: git push /path/to/repo/nullrepo.git master
git add
基       -i

本       -u
        -A
命   git status
令       位于第二列红色的M(红二):工作区—暂存区
        第一列绿色的M:暂存区-版本库
        git status -s 精简输出
        git status –s –b 查看当前工作分支 (git branch)
    git diff
        git diff 工作区—暂存区
        git diff HEAD 工作区—版本库
        git diff –cache 暂存区—版本库
        git diff –staged 暂存区—版本库


           比较文件输出的一堆内容是什么
基   git clean –fd 清除工作区未加入版本库的非跟踪文件和目录
本   git checkout . 用暂存区内容刷新工作区
命   git commit –a 对本地所有变更文件(修改、删除)提交
令   git cat-file –t <版本> 查看类型 tree blob commit
    git cat-file –p <版本> 查看版本提交的内容
master 代表分支master中最新的提交(分支名不一定是master
版     refs/heads/master 或 heads/master
本   HEAD 最近的一次提交
号   HEAD^ 最近两个提交 || HEAD^1
    HEAD^^ 最近三次提交 || HEAD^2
    a34690
    a34690^^ || A34690~2
    :访问
      HEAD:path/to/file
      a34690^3:path/to/file
      :path/to/file 暂存区中的文件
HEAD指针
重      HEAD指针永远指向当前分支的最近一次提交
置      more .git/refs/heads/master(假如当前分支在master分支)

命      可以人为的改变HEAD指针 git reset
    git reset –hard 版本号 [-- file]
令      重置三个区域到版本号,是最危险的操作,会删除local的多余文件
    git reset –soft 版本号 [– file]
       改变HEAD指针,不改变local和stage
    git reset –mixed 版本号 [-- file]
       改变HEAD指针,重置stage,不改变Local (默认操作)
    恢复—hard的结果
       git reflog show master | head 6
       git reset –hard master@{3}



         哈唏值是怎么计算来的?
检   危险命令

出
    git checkout branch – filename
       维持HEAD不变,用branch指向的filename替换暂存区和工作区的相应文
命      件

令   git checkout branch
       检出branch分支,更新HEAD以指向branch分支,更新暂存区和工作区
    git checkout –b branch start_point
    git checkout
       汇总显示工作区、暂存区与HEAD的差异
    git checkout – filename
       用暂存区中filename文件来覆盖工作区中的filename文件(危险)
    git checkout . 或 git checkout -- .
    会取消所有本地的修改,相当于暂存区的所有文件直接覆盖本地文件
冲突一:修改不同的文件
冲    有其他用户已经push,会push失败,除非强制push -f

突
     解决:先pull ( pull = fetch + merge)
     说明:可以禁用强制push
解      git config receive.denyNonFastForwards true

决
       merge默认会自动提交,如果不想commit,可以提供—no-commit
    冲突二:修改相同文件的不同区域
     同冲突一方案解决
     git blame filename可以查看每一行是谁改的
    冲突三:修改相同文件的相同区域
     手工编辑完成冲突解决 git add -u
       <<<<<<(七个小于号)
       我自己的版本
       =======(七个等于号)
       他人更改的版本
       >>>>>>>(七个大于号)
     图形工具完成冲突解决
       git mergetool
       需要安装 以下之一 kdiff3 meld tortoisemerge araxis 
       A: 共同祖先版本 B: 我的版本 C: 他人的版本
冲突四:一个用户更改了文件名,另一个用户更改了文件的内容
冲    解决方案同冲突一,可以用pull自动合并

突   冲突五:任何软件都无法解决的问题
     一个用户把函数名改了或者把函数的函数体改成了另外的功能,另一个
解    用户还是在用这个用户,这是人为造成的bug,git也无能为力。

决   冲突六:两个或者多个用户同时修改文件名
     解决方案,共同商定用哪个文件名
        命令行方式:
           git rm 删除不要的文件
           git add 最后的文件
           git commit
        问答式:
           git mergetool
    冲突的配置:
     merge.conflictstyle 设置标记风格,默认merge || diff3
        merge提供本地和他人的代码
        diff3提供本地、祖先、他人的代码
     merge.tool 配置图形化工具
git tag –n<num>显示<最多num行>里程碑
标   git describe 显示最近的一个里程碑

签   git tag <tagname> [<ID>] 创建轻量级里程碑
    git tag –a <tagnme> [<ID>] 创建带说明的里程碑
    git tag –m <msg> <tagname> [<ID>] 创建带说明的里程碑
    git tag –s <tagname> [<ID>] 创建带签名的里程碑
    git tag –u <key-id><tagname> [<ID>] 创建带签名的里程碑
    git tag –d <tagname> 删除里程碑
    说明:
      里程碑一般只存在于本地
      可以用git push origin mytag 显示推送到版本库以共享给他人
      用户获取里程碑 git pull
         git pull origin refs/tags/mytag:refs/tags/mytag
git branch 显示当前所有的分区,*号表示当前分区
分   git branch <branchname> 创建分区
支   git branch <branchname> <start-point>
    git branch –d <branchname> 删除分区(已经有过合并不能删除)
    git branch –D <branchname> 强制删除分区
    git branch –m <oldbranchname> <newbranchname>
       重命名分区
    git branch –M <oldbranchname> <newbranchname>
       强制重命名分区
    git merge <branchname>合并到当前分区

More Related Content

ODP
Git 程式碼版本控制軟體介紹
PPT
如何学习Bash Shell
PDF
Linux基础
ODP
Git basis - usage
PDF
Git Tutorial
PPT
Git 超簡單學習懶人包(軟體程式版本控管系統)
PDF
Osc scott linux下的数据库优化for_postgresql
PPT
Linux常用命令与工具简介
Git 程式碼版本控制軟體介紹
如何学习Bash Shell
Linux基础
Git basis - usage
Git Tutorial
Git 超簡單學習懶人包(軟體程式版本控管系統)
Osc scott linux下的数据库优化for_postgresql
Linux常用命令与工具简介

What's hot (9)

DOCX
Linux学习
PDF
Code review on github training ( beginner )
PDF
Code review on github training ( intermediate )
PDF
Introduce to Linux command line
PPTX
版本控制
PDF
Command line 初級寶典
PDF
VIM入门与进阶
DOCX
使用dd命令快速复制LV
PDF
Linux基础
Linux学习
Code review on github training ( beginner )
Code review on github training ( intermediate )
Introduce to Linux command line
版本控制
Command line 初級寶典
VIM入门与进阶
使用dd命令快速复制LV
Linux基础
Ad

Viewers also liked (8)

PDF
"Entendre la mobilitat a l’empresa: més enllà del mòbil!"
PPTX
Estrategias de estudio
PPT
Share module
PPTX
Flujograma del chuño
PPTX
Ridley Scott
PDF
StandOut Assessment C.Torres
PPTX
Basic marketing question
PPT
Schizophrenia disorder presentation for advanced psy
"Entendre la mobilitat a l’empresa: més enllà del mòbil!"
Estrategias de estudio
Share module
Flujograma del chuño
Ridley Scott
StandOut Assessment C.Torres
Basic marketing question
Schizophrenia disorder presentation for advanced psy
Ad

Similar to Git使用入门 (20)

PPT
Learn git
PPTX
Git Essence Tutorial
PDF
Git+使用教程
PDF
Git入门与实践
PDF
Git 入门实战
PPTX
Git 实战
PPTX
Git 使用介绍
PPTX
Git introduction
PDF
Git in a nutshell
PDF
Introduction to git
ODP
Git 教學
PPTX
Git基礎介紹
PDF
Git tutorial for windows user (給 Windows user 的 Git 教學)
PDF
Intro to Git 投影片
PPTX
Git入門介紹
PDF
Learning to Use Git | WeiYuan
PDF
為自己學 Git
PPTX
Git内部培训文档
PDF
初心者 Git 上手攻略
PPTX
Git and git hub
Learn git
Git Essence Tutorial
Git+使用教程
Git入门与实践
Git 入门实战
Git 实战
Git 使用介绍
Git introduction
Git in a nutshell
Introduction to git
Git 教學
Git基礎介紹
Git tutorial for windows user (給 Windows user 的 Git 教學)
Intro to Git 投影片
Git入門介紹
Learning to Use Git | WeiYuan
為自己學 Git
Git内部培训文档
初心者 Git 上手攻略
Git and git hub

Git使用入门

  • 1. git攻略 by 李春城 chuncheng.li@dianping.com
  • 2. git基本概念 暂存区 (stage) 暂存区:为了更高效,更快速的完成工作 稍后具体介绍各个命令的时候在介绍这三个的原理
  • 3. • git前奏 录 • git基本概念 • 配置、初化化 • 基本命令 • 暂存区 • 检出、重置 • git进阶 • 冲突解决 • 分支 • 标签、里程碑 3
  • 4. git 前 远程 奏 办公 重置 爱上 .git目录 提交 git 每日 备份
  • 5. 配置:git config 配 git config –-system key.value {/etc/config} 优先级最低 置 git config –-global key.value {~/.gitconfig} 文 git config key.value {.git/config} 优先级最高 件 一般的配置项: user.name user.email alias.别名 git config alias.ci “commit –u” color.ui true git config –e –-global git config --unset key.value 在哪可查看远程版本路径?
  • 6. git支持的协议 初 ssh(scp)githttp(s)地地协议 始 git init 化 git clone <repository> <local directory> 文件+版本库均检出,是一个对等工作区,只能Pull,不能push 版 git clone –bare <repository> <local directory.git> 本 只检出版本库(祼库) 库 git clone –mirror <repository> <local directory.git> 与bare区别:在<repository>可以fetch <local repository> 注意:创建一个祼版本库后,第一次用git push会报错,因为远程 版本库还没有任何分支,所以第一次提交命令后面要跟上一个分支 号 eg: git push /path/to/repo/nullrepo.git master
  • 7. git add 基 -i 本 -u -A 命 git status 令 位于第二列红色的M(红二):工作区—暂存区 第一列绿色的M:暂存区-版本库 git status -s 精简输出 git status –s –b 查看当前工作分支 (git branch) git diff git diff 工作区—暂存区 git diff HEAD 工作区—版本库 git diff –cache 暂存区—版本库 git diff –staged 暂存区—版本库 比较文件输出的一堆内容是什么
  • 8. git clean –fd 清除工作区未加入版本库的非跟踪文件和目录 本 git checkout . 用暂存区内容刷新工作区 命 git commit –a 对本地所有变更文件(修改、删除)提交 令 git cat-file –t <版本> 查看类型 tree blob commit git cat-file –p <版本> 查看版本提交的内容
  • 9. master 代表分支master中最新的提交(分支名不一定是master 版 refs/heads/master 或 heads/master 本 HEAD 最近的一次提交 号 HEAD^ 最近两个提交 || HEAD^1 HEAD^^ 最近三次提交 || HEAD^2 a34690 a34690^^ || A34690~2 :访问 HEAD:path/to/file a34690^3:path/to/file :path/to/file 暂存区中的文件
  • 10. HEAD指针 重 HEAD指针永远指向当前分支的最近一次提交 置 more .git/refs/heads/master(假如当前分支在master分支) 命 可以人为的改变HEAD指针 git reset git reset –hard 版本号 [-- file] 令 重置三个区域到版本号,是最危险的操作,会删除local的多余文件 git reset –soft 版本号 [– file] 改变HEAD指针,不改变local和stage git reset –mixed 版本号 [-- file] 改变HEAD指针,重置stage,不改变Local (默认操作) 恢复—hard的结果 git reflog show master | head 6 git reset –hard master@{3} 哈唏值是怎么计算来的?
  • 11. 危险命令 出 git checkout branch – filename 维持HEAD不变,用branch指向的filename替换暂存区和工作区的相应文 命 件 令 git checkout branch 检出branch分支,更新HEAD以指向branch分支,更新暂存区和工作区 git checkout –b branch start_point git checkout 汇总显示工作区、暂存区与HEAD的差异 git checkout – filename 用暂存区中filename文件来覆盖工作区中的filename文件(危险) git checkout . 或 git checkout -- . 会取消所有本地的修改,相当于暂存区的所有文件直接覆盖本地文件
  • 12. 冲突一:修改不同的文件 冲 有其他用户已经push,会push失败,除非强制push -f 突 解决:先pull ( pull = fetch + merge) 说明:可以禁用强制push 解 git config receive.denyNonFastForwards true 决 merge默认会自动提交,如果不想commit,可以提供—no-commit 冲突二:修改相同文件的不同区域 同冲突一方案解决 git blame filename可以查看每一行是谁改的 冲突三:修改相同文件的相同区域 手工编辑完成冲突解决 git add -u <<<<<<(七个小于号) 我自己的版本 =======(七个等于号) 他人更改的版本 >>>>>>>(七个大于号) 图形工具完成冲突解决 git mergetool 需要安装 以下之一 kdiff3 meld tortoisemerge araxis A: 共同祖先版本 B: 我的版本 C: 他人的版本
  • 13. 冲突四:一个用户更改了文件名,另一个用户更改了文件的内容 冲 解决方案同冲突一,可以用pull自动合并 突 冲突五:任何软件都无法解决的问题 一个用户把函数名改了或者把函数的函数体改成了另外的功能,另一个 解 用户还是在用这个用户,这是人为造成的bug,git也无能为力。 决 冲突六:两个或者多个用户同时修改文件名 解决方案,共同商定用哪个文件名 命令行方式: git rm 删除不要的文件 git add 最后的文件 git commit 问答式: git mergetool 冲突的配置: merge.conflictstyle 设置标记风格,默认merge || diff3 merge提供本地和他人的代码 diff3提供本地、祖先、他人的代码 merge.tool 配置图形化工具
  • 14. git tag –n<num>显示<最多num行>里程碑 标 git describe 显示最近的一个里程碑 签 git tag <tagname> [<ID>] 创建轻量级里程碑 git tag –a <tagnme> [<ID>] 创建带说明的里程碑 git tag –m <msg> <tagname> [<ID>] 创建带说明的里程碑 git tag –s <tagname> [<ID>] 创建带签名的里程碑 git tag –u <key-id><tagname> [<ID>] 创建带签名的里程碑 git tag –d <tagname> 删除里程碑 说明: 里程碑一般只存在于本地 可以用git push origin mytag 显示推送到版本库以共享给他人 用户获取里程碑 git pull git pull origin refs/tags/mytag:refs/tags/mytag
  • 15. git branch 显示当前所有的分区,*号表示当前分区 分 git branch <branchname> 创建分区 支 git branch <branchname> <start-point> git branch –d <branchname> 删除分区(已经有过合并不能删除) git branch –D <branchname> 强制删除分区 git branch –m <oldbranchname> <newbranchname> 重命名分区 git branch –M <oldbranchname> <newbranchname> 强制重命名分区 git merge <branchname>合并到当前分区