SlideShare une entreprise Scribd logo
1  sur  15
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>合并到当前分区

Contenu connexe

Tendances (9)

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

En vedette (8)

"Entendre la mobilitat a l’empresa: més enllà del mòbil!"
"Entendre la mobilitat a l’empresa: més enllà del mòbil!""Entendre la mobilitat a l’empresa: més enllà del mòbil!"
"Entendre la mobilitat a l’empresa: més enllà del mòbil!"
 
Estrategias de estudio
Estrategias de estudioEstrategias de estudio
Estrategias de estudio
 
Share module
Share moduleShare module
Share module
 
Flujograma del chuño
Flujograma del chuñoFlujograma del chuño
Flujograma del chuño
 
Ridley Scott
Ridley ScottRidley Scott
Ridley Scott
 
StandOut Assessment C.Torres
StandOut Assessment C.TorresStandOut Assessment C.Torres
StandOut Assessment C.Torres
 
Basic marketing question
Basic marketing questionBasic marketing question
Basic marketing question
 
Schizophrenia disorder presentation for advanced psy
Schizophrenia disorder presentation for advanced psySchizophrenia disorder presentation for advanced psy
Schizophrenia disorder presentation for advanced psy
 

Similaire à Git使用入门

版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
 
Git内部培训文档
Git内部培训文档Git内部培训文档
Git内部培训文档
superwen
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
 

Similaire à Git使用入门 (20)

Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
Git 教學
Git 教學Git 教學
Git 教學
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Git share
Git shareGit share
Git share
 
Git 实战
Git 实战Git 实战
Git 实战
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
Git内部培训文档
Git内部培训文档Git内部培训文档
Git内部培训文档
 
20150313 ian git
20150313 ian git20150313 ian git
20150313 ian git
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git初步入門
Git初步入門Git初步入門
Git初步入門
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 

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>合并到当前分区