SlideShare uma empresa Scribd logo
1 de 120
Baixar para ler offline
Git
                   网易有道 张宇辰




Monday, February 27, 12
Agency

                   • Git 历史


                   • 为什么用 Git


                   • Git 基础知识


                   • 基本命令


                   • 暂存区与指针控制 (git reset/git checkout)


                   • 与 SVN 协同 (git svn)




Monday, February 27, 12
Git 历史
                          源社区又一神作




Monday, February 27, 12
Linus Torvalds

                   • Linux 项目的发起者


                   • 痛恨 VCS&SVN


                   • 大神、脾气火爆、非常固执




Monday, February 27, 12
1991~2002 大神只用邮件收集    源社区的 patch,手工集成到自己电脑里



                                手工集成……手工……手工……伤不起啊!




                          源社区
Monday, February 27, 12
2002∼2005 大神终于选了 Bitlocker 做版本控制,一个商业软件



                                商业软件……商业……商业……




                          源社区
Monday, February 27, 12
2005 年,Bitlocker 结束了对   源社区的授权。




Monday, February 27, 12
2005 年,Bitlocker 结束了对          源社区的授权。

                                       我只是好奇...




                     Andrew Tridgell
Monday, February 27, 12
2005 年,Bitlocker 结束了对          源社区的授权。

                                       我只是好奇...

                                        一夜回到解放前




                     Andrew Tridgell              源社区
Monday, February 27, 12
2005 年,Bitlocker 结束了对          源社区的授权。
                                                               自己写一个!
                                       我只是好奇...

                                        一夜回到解放前




                     Andrew Tridgell              源社区   Linus Torvalds
Monday, February 27, 12
• 2005 年 4 月 3 日,   始   发 Git



                   • 同年 4 月 6 日,项目发布



                   • 同年 4 月 7 日,Git 作为自身的项目控制工具,仅仅用了 5 天



                   • 同年 4 月 18 日,第一次多分支合并



                   • 同年 4 月 29 日,Linus 表示对 Git 的性能满意了



                   • 同年 6 月 16 日,Linux 2.6.12 发布,   始用 Git 维护,此时仅仅经过 74 天




Monday, February 27, 12
Git 今日




                            Perl
                                   3,500,000+ repositories




                                               Qt

Monday, February 27, 12
为什么选择 Git
                   SVN 为什么不爽




Monday, February 27, 12
Bad case

                   •      发过程中接到紧急需求


                   • 等待 review 的代码污染工作区


                   • 离线     发怎么办


                   • 写 Log 时不知道写什么




Monday, February 27, 12
SVN




                            remote     checkout
                                                  working copy    modify
                          repository    commit


                                                     developer’s computer
                             所有的修改只能发生在没有版本控制的本地 working copy 中




Monday, February 27, 12
Git




                            remote      pull      local     checkout
                                                                       working copy
                          repository   push    repository   commit

                                                            developer’s computer




Monday, February 27, 12
Git




                            remote      pull      local     checkout
                                                                       working copy
                          repository   push    repository   commit

                                                            developer’s computer
                                                                               速度快
                                                                           历史记录可控
                                                                           可以离线工作


Monday, February 27, 12
Git -- DVCS


                            remote
                          repository

                            devA
                          repository   Distributed Version Control System

                            devB
                          repository

                             ...


Monday, February 27, 12
除此之外

                   • 无处不在的自动分页 (less)


                   • diff 支持逐字比较 (git diff --word-diff)


                   • 版本库又小又快


                   • 支持多     网络传输协议 (http/ssh) 以及更强大的 git 协议,可以显示传输进度


                   • 丰富且简单的 config 配置




Monday, February 27, 12
安装 Git




Monday, February 27, 12
Linux & Mac

                   • Git: http://git-scm.com




Monday, February 27, 12
Windows

                   • Cygwin + git (推荐)


                          • 命令更丰富


                   • msysGit + TortoiseGit

                          • 图形界面


                          • 对中文目录名和文件名处理有问题




Monday, February 27, 12
Git 基础知识
                   Git 就是个文件系统




Monday, February 27, 12
Git 内部对象


                          null   Commit 1           Commit 2

                                  Tree 1             Tree 2



                                            FileA              FileA 2

                                            FileB

                                            FileC


Monday, February 27, 12
Git 内部对象


                          null   Commit 1           Commit 2

                                  Tree 1             Tree 2



                                            FileA              FileA 2

                                            FileB

                                            FileC

                                       一次提交中所有的文件
Monday, February 27, 12
Git 内部对象


                          null    Commit 1            Commit 2

                                   Tree 1              Tree 2



                                             FileA               FileA 2

                                             FileB

                                             FileC

                                 一次提交                又一次提交
Monday, February 27, 12
Git 内部对象


                          null   Commit 1           Commit 2

                                  Tree 1             Tree 2



           同一个文件的历史版本                       FileA              FileA 2

                                            FileB

                                            FileC


Monday, February 27, 12
Git 内部对象



                          null   Commit 1   Commit 2   HEAD


                   提交对象不可变且拥全局唯一 id
                   除第一个提交外,每个提交都保存上一个提交的引用
                   -- Git 里面就是个大链表



Monday, February 27, 12
Git 基础命令




Monday, February 27, 12
不是检出
                                           git clone remote_repo_url
                          (checkout)
                                        克隆一份远程仓库成为本地仓库



                             remote     clone      local     checkout
                                                                        working copy
                           repository           repository




Monday, February 27, 12
remote           commit
                          repository         239d5        master


                               clone
                                          origin/master

                             local            commit
                          repository          239d5       master   HEAD

                               checkout

                      working copy


Monday, February 27, 12
HEAD: 指向当前工作的 branch
         master: 默认的主干分支指针
         origin/master: 远程仓库 origin 中 master 分支的指针

         origin: 远程仓库名,在 git clone 时默认创建




                   commit   origin/master
                   239d5    master HEAD
Monday, February 27, 12
echo “hello” > world
                                       git add world

                                    将文件加入版本库



                                            svn add




                   commit   origin/master
                   239d5    master HEAD
Monday, February 27, 12
git commit -m “init commit”

                                            第一个提交


                                            svn commit




                                             origin/master

                          commit   commit
                          239d5    7ca54     master      HEAD
Monday, February 27, 12
git push origin master

                          将本地仓库推送到远程仓库上


                                 svn commit




Monday, February 27, 12
remote          commit
                          repository        239d5       master



                                        origin/master

                             local          commit
                          repository        239d5       master   HEAD

                               commit

                      working copy


Monday, February 27, 12
remote          commit
                          repository        239d5       master



                                        origin/master

                             local          commit       commit
                          repository        239d5        7ca54    master   HEAD

                               commit

                      working copy


Monday, February 27, 12
remote          commit      commit
                          repository        239d5       7ca54    master


                                 push
                                        origin/master

                             local          commit      commit
                          repository        239d5       7ca54    master   HEAD

                               commit

                      working copy


Monday, February 27, 12
remote      commit       commit
                          repository    239d5        7ca54       master


                                 push
                                                 origin/master

                             local      commit       commit
                          repository    239d5        7ca54       master   HEAD

                               commit

                      working copy


Monday, February 27, 12
Git 分支

                                    git branch featureA
                                   git checkout featureA

                                 在本地仓库创建一个分支




            origin/master      master

                   commit
                   7ca54    featureA     HEAD
Monday, February 27, 12
Git 分支


                                            git branch -a

                                           查看所有分支
                                            master
                                          * foo
                                            remotes/origin/master



            origin/master        master

                   commit
                   7ca54    reatureA   HEAD
Monday, February 27, 12
Git 分支


                          echo “r2” >> world; git add world; git commit -m ‘r2’




            origin/master           master

                   commit
                   7ca54       reatureA   HEAD
Monday, February 27, 12
Git 分支


                          echo “r2” >> world; git add world; git commit -m ‘r2’




            origin/master           master

                   commit           commit
                   7ca54            6539d       featureA       HEAD
Monday, February 27, 12
Git 分支切换


                                     git checkout master




            origin/master   master

                   commit   commit
                   7ca54    6539d          featureA        HEAD
Monday, February 27, 12
Git 分支切换


                                     git checkout master




            origin/master   master              HEAD

                   commit   commit
                   7ca54    6539d          featureA
Monday, February 27, 12
Git 分支切换


                                     git merge master

                                快进 (fast forward) 合并




            origin/master   master            HEAD

                   commit   commit
                   7ca54    6539d         featureA
Monday, February 27, 12
Git 分支合并


                                     git merge featureA

                                快进 (fast forward) 合并




            origin/master master         HEAD

                   commit   commit
                   7ca54    6539d         featureA
Monday, February 27, 12
Git 分支合并


                                 git branch -d featureA




            origin/master master       HEAD

                   commit   commit
                   7ca54    6539d      featureA
Monday, February 27, 12
Git 分支合并


                                 git branch -d featureA




            origin/master master       HEAD

                   commit   commit
                   7ca54    6539d
Monday, February 27, 12
Git 冲突解决
                             remote          commit      commit
                           repository        7ca54        ae78f   master


                                push
                                         origin/master

                              local          commit      commit
                           repository        7ca54       6539d    master   HEAD



                          working copy


Monday, February 27, 12
Git 冲突解决


                                  git push




                          类似 svn 的 out of date 提示


Monday, February 27, 12
remote          commit      commit
                           repository        7ca54        ae78f   master


                                 pull
                                         origin/master

                              local          commit      commit
                           repository        7ca54       6539d    master   HEAD



                          working copy


Monday, February 27, 12
remote          commit      commit
                           repository        7ca54        ae78f   master


                                 pull


                              local          commit      commit
                           repository        7ca54       6539d    master   HEAD

                                             commit
                                              ae78f
                          working copy
                                         origin/master
Monday, February 27, 12
remote          commit      commit
                           repository        7ca54        ae78f   master


                                 pull


                              local          commit      commit
                           repository        7ca54       6539d    master   HEAD

                                             commit      commit
                                              ae78f      36dc2
                          working copy
                                         origin/master
Monday, February 27, 12
remote          commit      commit
                           repository        7ca54        ae78f   master


                                 pull


                              local          commit      commit
                           repository        7ca54       6539d


                                             commit      commit
                                              ae78f      36dc2    master   HEAD
                          working copy
                                         origin/master
Monday, February 27, 12
remote          commit      commit
                           repository        7ca54        ae78f   master


                                push


                              local          commit      commit
                           repository        7ca54       6539d


                                             commit      commit
                                              ae78f      36dc2    master   HEAD
                          working copy
                                         origin/master
Monday, February 27, 12
commit      commit
                                             7ca54        ae78f   master
                             remote
                           repository        commit      commit
                                             6539d       36dc2


                                push


                              local          commit      commit
                           repository        7ca54       6539d


                                             commit      commit
                                              ae78f      36dc2    master   HEAD
                          working copy
                                         origin/master
Monday, February 27, 12
commit       commit
                                         7ca54         ae78f

                             remote
                           repository    commit       commit
                                         6539d        36dc2       master

                                push


                              local      commit       commit
                           repository    7ca54        6539d


                                         commit       commit
                                          ae78f       36dc2       master   HEAD
                          working copy
                                                  origin/master
Monday, February 27, 12
暂存区与指针控制
                   git add
                   git checkout
                   git reset




Monday, February 27, 12
Git 暂存区



                      工作区        版本库
                          a.js    暂存区       HEAD
                          b.js              master



                                   commit   commit   commit
                                   7dae1    86dea    763da



Monday, February 27, 12
Git 暂存区

                    git add a.js b.js

                      工作区               版本库
                          a.js           暂存区        HEAD
                          b.js            a.js      master
                                          b.js



                                           commit   commit   commit
                                           7dae1    86dea    763da



Monday, February 27, 12
Git 暂存区

                          git commit

                      工作区              版本库
                          a.js          暂存区        HEAD
                          b.js           a.js      master
                                         b.js



                                          commit   commit   commit
                                          7dae1    86dea    763da



Monday, February 27, 12
Git 暂存区

                          git commit

                      工作区              版本库
                          a.js          暂存区        HEAD
                          b.js           a.js      master
                                         b.js



                                          commit   commit
                                          86dea    763da



Monday, February 27, 12
Git 暂存区

                          git commit

                      工作区              版本库
                          a.js                    HEAD
                          b.js                    master



                                         commit   commit   暂存区
                                         86dea    763da
                                                            a.js
                                                            b.js
Monday, February 27, 12
Git 暂存区

                          git commit

                      工作区              版本库
                          a.js                    HEAD
                          b.js                    master



                                         commit   commit   暂存区
                                         86dea    763da
                                                            a.js
                                                            b.js
Monday, February 27, 12
Git 暂存区

                          git commit

                      工作区              版本库
                          a.js                    HEAD
                          b.js                    master



                                         commit   commit   暂存区
                                         86dea    763da
                                                            a.js
                                                            b.js
Monday, February 27, 12
Git 暂存区

                          git commit

                      工作区              版本库
                          a.js                    HEAD
                          b.js                    master



                                         commit   commit
                                         86dea    763da



Monday, February 27, 12
Git 暂存区



                      工作区        版本库
                          a.js              HEAD
                          b.js              master



                                   commit   commit
                                   86dea    763da



Monday, February 27, 12
Git 暂存区



                      工作区        版本库
                          a.js              HEAD
                          b.js              master



                                   commit   commit   commit
                                   86dea    763da     12caa



Monday, February 27, 12
Git 暂存区



                      工作区        版本库
                          a.js              HEAD
                          b.js              master



                                   commit   commit   commit
                                   86dea    763da     12caa



Monday, February 27, 12
Git 暂存区



                      工作区        版本库
                          a.js              HEAD
                          b.js              master



                                   commit   commit   commit
                                   86dea    763da     12caa



Monday, February 27, 12
Git 暂存区



                      工作区        版本库
                          a.js    暂存区        HEAD
                          b.js     a.js      master
                                   b.js



                                    commit   commit   commit
                                    86dea    763da     12caa



Monday, February 27, 12
Git 分支指针控制

                   git reset --soft 763da
                      工作区           版本库
                          a.js        暂存区             HEAD
                          b.js              a.js      master
                                            b.js



                                             commit   commit   commit
                                             86dea    763da     12caa



Monday, February 27, 12
Git 分支指针控制

                   git reset --soft 763da
                      工作区           版本库
                          a.js        暂存区             HEAD
                          b.js              a.js      master
                                            b.js
                                                           1

                                             commit   commit   commit
                                             86dea    763da     12caa



Monday, February 27, 12
Git 分支指针控制

                   git reset [--mixed] 763da
                      工作区           版本库
                          a.js        暂存区         HEAD
                          b.js          a.js      master
                                        b.js
                                                       1

                                         commit   commit   commit
                                         86dea    763da     12caa



Monday, February 27, 12
Git 分支指针控制

                   git reset [--mixed] 763da
                      工作区           版本库
                          a.js        暂存区             HEAD
                          b.js                        master
                                                  2        1

                                         commit       commit   commit
                                         86dea        763da     12caa



Monday, February 27, 12
Git 分支指针控制

                   git reset --hard 763da
                      工作区          版本库
                          a.js        暂存区                HEAD
                          b.js                           master
                                                     2        1

                                            commit       commit   commit
                                            86dea        763da     12caa



Monday, February 27, 12
Git 分支指针控制

                   git reset --hard 763da
                      工作区              版本库
                                 3*       暂存区                HEAD

                                                             master
                                                         2        1

                                             commit          commit            commit
                                             86dea           763da              12caa


                   * 此处仅做演示 --hard 的效果,实际上 git 不会删除暂存区中不存在的文件,只会添加新文件和重置文件修改
Monday, February 27, 12
Git 分支指针控制

                   git reset
                   --soft: 1
                   --mixed: 1 & 2      版本库
                   --hard: 1 & 2 & 3
                                        暂存区             HEAD

                                                        master
                                  3*                2                 I’m lost*
                                                             1
                  工作区
                                         commit         commit      commit
                          a.js           86dea          763da        12caa
                          b.js

                                             * 可以通过 git reflog 查看 HEAD 指针最近的移动历史
Monday, February 27, 12
Git 分支指针控制

                          3   == git checkout .

                                          版本库
                                            暂存区                HEAD

                                                               master
                                    3                      2        1
                  工作区
                                                  commit       commit
                          a.js                    86dea        763da
                          b.js

Monday, February 27, 12
Git HEAD 指针控制

                    git checkout 86dea

                      工作区          版本库
                          a.js       暂存区           HEAD
                          b.js           a.js      master
                                         b.js



                                          commit   commit   commit
                                          7dae1    86dea    763da



Monday, February 27, 12
Git HEAD 指针控制

                    git checkout 86dea

                      工作区          版本库
                          a.js       暂存区           HEAD
                          b.js           a.js      master
                                         b.js
                                                    1


                                          commit   commit   commit
                                          7dae1    86dea    763da



Monday, February 27, 12
Git HEAD 指针控制

                    git checkout 86dea

                      工作区          版本库
                          a.js       暂存区              HEAD
                          b.js                        master
                                                  2
                                                       1


                                         commit       commit   commit
                                         7dae1        86dea    763da



Monday, February 27, 12
detached HEAD 状态

                    git checkout 86dea
                     Note: checking out '86dea'.

                     You are in 'detached HEAD' state. You can look around, make experimental
                     changes and commit them, and you can discard any commits you make in this
                     state without impacting any branches by performing another checkout.

                     If you want to create a new branch to retain commits you create, you may
                     do so (now or later) by using -b with the checkout command again. Example:

                          git checkout -b new_branch_name

                     HEAD is now at 78f871f... remove doc




                                                                                                  HEAD     master

                                                                                  commit          commit   commit
                                                                                  7dae1           86dea    763da

Monday, February 27, 12
detached HEAD 状态



                                      HEAD

                                      commit
                                      45cdd
                                               master

                            commit    commit   commit
                            7dae1     86dea    763da




Monday, February 27, 12
detached HEAD 状态

                   git checkout master


                                                  HEAD
                                         commit
                                         45cdd
                                                  master

                              commit     commit   commit
                              7dae1      86dea    763da




Monday, February 27, 12
detached HEAD 状态



                                      I’m lost
                                                 HEAD
                                      commit
                                      45cdd
                                                 master

                            commit    commit     commit
                            7dae1     86dea      763da




Monday, February 27, 12
在 detached HEAD 状态上创建分支

                   git checkout -b branch

                                            HEAD

                                            branch

                                            commit
                                            45cdd
                                                     master

                               commit       commit   commit
                               7dae1        86dea    763da


Monday, February 27, 12
在 detached HEAD 状态上创建分支

                   git checkout master

                                         branch
                                                  HEAD
                                         commit
                                         45cdd
                                                  master

                              commit     commit   commit
                              7dae1      86dea    763da




Monday, February 27, 12
修改历史记录
                   git rebase




Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master


                                         commit
                                         832ac     foo     HEAD
                          commit         commit
                          7ca54          6539d    master




Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master

                                                  foo   HEAD
                                         commit
                                         832ac

                          commit         commit
                          7ca54          6539d



                                         master


Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master

                                                  foo   HEAD
                                         commit
                                         832ac

                          commit         commit
                          7ca54          6539d



                                         master


Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master

                                                  foo      HEAD
                                         commit
                                         832ac

                          commit         commit   commit
                          7ca54          6539d    35ce5



                                         master


Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master

                                                  foo      HEAD
                                         commit
                                         832ac

                          commit         commit   commit
                          7ca54          6539d    35ce5



                                         master


Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master

                                                  foo      HEAD
                                         commit
                                         832ac

                          commit         commit   commit
                          7ca54          6539d    35ce5



                                         master


Monday, February 27, 12
通过 rebase 合并分支

                     git rebase master

                                                  foo      HEAD
                                         commit
                                         832ac

                          commit         commit   commit
                          7ca54          6539d    35ce5



                                         master


Monday, February 27, 12
通过 rebase 合并分支

                     git checkout master; git merge foo
                                                          foo   HEAD
                                        commit
                                        832ac

                          commit        commit        commit
                          7ca54         6539d         35ce5



                                       master


Monday, February 27, 12
通过 rebase 合并分支

                     git checkout master; git merge foo
                                                          foo
                                        commit
                                        832ac

                          commit        commit        commit
                          7ca54         6539d         35ce5



                                                     master     HEAD


Monday, February 27, 12
通过 rebase 合并分支

                     Pros:
                     提交记录更简单

                     Cons:
                     操作略微    杂
                                                      HEAD

                                                      master
                                    commit   commit   commit
                                    7ca54    6539d    35ce5


Monday, February 27, 12
Git + SVN 协同




Monday, February 27, 12
git svn clone -r 310135:HEAD --trunk=trunk --branches=branches --branches=milestones https://..../YNote/Client

Monday, February 27, 12
git 命令      svn 命令



                          git pull   svn update



                          git push   svn commit




Monday, February 27, 12
git 命令     git svn 胶水命令       svn 命令



                          git pull   git svn rebase    svn update



                          git push   git svn dcommit   svn commit




Monday, February 27, 12
Git 技巧




Monday, February 27, 12
Git revert




                                commit    commit
                                239d5     7ca54     master   HEAD
                                         a.js +++




Monday, February 27, 12
Git revert




                           commit    commit     commit
                           239d5     7ca54      7865a     master   HEAD
                                    a.js +++   a.js ---




Monday, February 27, 12
git commit --amend



                                     MOD: blahblah

                            commit       commit
                            239d5        7ca54    master   HEAD




Monday, February 27, 12
git commit --amend




Monday, February 27, 12
git commit --amend



                                     MOD: blahblah

                            commit       commit
                            239d5        7ca54


                                         commit
                                         7ca54     master   HEAD

                                        MOD: ...


Monday, February 27, 12
通过 rebase 合并提交记录

                    git rebase -i origin/master      # -i 进入交互式 rebase

                          origin/master                   HEAD
                              commit
                              7ca54                      master


                                            commit        commit
                                            6539d         35ce5




Monday, February 27, 12
通过 rebase 合并提交记录

                    git rebase -i origin/master      # -i 进入交互式 rebase

                          origin/master                   HEAD
                              commit        commit
                              7ca54         d32ab        master


                                            commit        commit
                                            6539d         35ce5




Monday, February 27, 12
通过 rebase 合并提交记录

                    git rebase -i origin/master      # -i 进入交互式 rebase

                          origin/master                   HEAD
                              commit        commit
                              7ca54         d32ab        master




Monday, February 27, 12
通过 rebase 丢弃提交记录

                    git rebase -i origin/master      # -i 进入交互式 rebase

                          origin/master                   HEAD
                              commit
                              7ca54                      master


                                            commit        commit
                                            6539d         35ce5




Monday, February 27, 12
通过 rebase 丢弃提交记录

                    git rebase -i origin/master      # -i 进入交互式 rebase

                          origin/master                   HEAD
                              commit        commit
                              7ca54         d32ab        master


                                            commit        commit
                                            6539d         35ce5




Monday, February 27, 12
Git rebase tip

                   • 文件只要进了 git 的版本库,就是安全的


                   • rebase 本质上是基于已有提交构造新提交


                   • 永远不要 rebase 已经推送到公共仓库的提交




Monday, February 27, 12
Git 学习资源




Monday, February 27, 12
Pro git
                   免费的在线电子书
                   http://progit.org




Monday, February 27, 12
Git 权威指南




Monday, February 27, 12
Q&A




                                张宇辰 zhangyc@rd.netease.com
                                    git 学习 POPO 群: 1195049
Monday, February 27, 12

Mais conteúdo relacionado

Destaque

web-frontend-overview
web-frontend-overviewweb-frontend-overview
web-frontend-overviewotakustay
 
浅谈 Javascript 性能优化
浅谈 Javascript 性能优化浅谈 Javascript 性能优化
浅谈 Javascript 性能优化rainoxu
 
Steve Jobs Announces iTown - Douban Special Event, Jan 2012
Steve Jobs Announces iTown - Douban Special Event, Jan 2012Steve Jobs Announces iTown - Douban Special Event, Jan 2012
Steve Jobs Announces iTown - Douban Special Event, Jan 2012Dexter Yang
 
Linux 系列分享[1] 概览
Linux 系列分享[1]   概览Linux 系列分享[1]   概览
Linux 系列分享[1] 概览rainoxu
 
通用JS时代的模块机制和编译工具
通用JS时代的模块机制和编译工具通用JS时代的模块机制和编译工具
通用JS时代的模块机制和编译工具Dexter Yang
 
Learning JavaScript in Three Web Apps(中文)
Learning JavaScript in Three Web Apps(中文)Learning JavaScript in Three Web Apps(中文)
Learning JavaScript in Three Web Apps(中文)Dexter Yang
 
Axure高级技巧和文档礼仪
Axure高级技巧和文档礼仪Axure高级技巧和文档礼仪
Axure高级技巧和文档礼仪麦哥UE
 
手机助手Phone端竞品分析
手机助手Phone端竞品分析手机助手Phone端竞品分析
手机助手Phone端竞品分析麦哥UE
 
新版阿尔法城背后的前端MVC实践
新版阿尔法城背后的前端MVC实践新版阿尔法城背后的前端MVC实践
新版阿尔法城背后的前端MVC实践Dexter Yang
 
最终 大屏手机上的设计策略
最终 大屏手机上的设计策略最终 大屏手机上的设计策略
最终 大屏手机上的设计策略麦哥UE
 
从钢铁侠与美国队长看用户体验
从钢铁侠与美国队长看用户体验从钢铁侠与美国队长看用户体验
从钢铁侠与美国队长看用户体验麦哥UE
 
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程zhangdaiping
 
塑造产品核心亮点的设计
塑造产品核心亮点的设计塑造产品核心亮点的设计
塑造产品核心亮点的设计麦哥UE
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Tim (文昌)
 
设计好的用户体验 郑磊
设计好的用户体验 郑磊设计好的用户体验 郑磊
设计好的用户体验 郑磊麦哥UE
 
CardKit & DOMO UI - 移动时代技术与设计的十字路口
CardKit & DOMO UI - 移动时代技术与设计的十字路口CardKit & DOMO UI - 移动时代技术与设计的十字路口
CardKit & DOMO UI - 移动时代技术与设计的十字路口Dexter Yang
 
李成银:前端编译平台
李成银:前端编译平台李成银:前端编译平台
李成银:前端编译平台taobao.com
 
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践taobao.com
 

Destaque (20)

web-frontend-overview
web-frontend-overviewweb-frontend-overview
web-frontend-overview
 
浅谈 Javascript 性能优化
浅谈 Javascript 性能优化浅谈 Javascript 性能优化
浅谈 Javascript 性能优化
 
Steve Jobs Announces iTown - Douban Special Event, Jan 2012
Steve Jobs Announces iTown - Douban Special Event, Jan 2012Steve Jobs Announces iTown - Douban Special Event, Jan 2012
Steve Jobs Announces iTown - Douban Special Event, Jan 2012
 
Linux 系列分享[1] 概览
Linux 系列分享[1]   概览Linux 系列分享[1]   概览
Linux 系列分享[1] 概览
 
通用JS时代的模块机制和编译工具
通用JS时代的模块机制和编译工具通用JS时代的模块机制和编译工具
通用JS时代的模块机制和编译工具
 
Learning JavaScript in Three Web Apps(中文)
Learning JavaScript in Three Web Apps(中文)Learning JavaScript in Three Web Apps(中文)
Learning JavaScript in Three Web Apps(中文)
 
Axure高级技巧和文档礼仪
Axure高级技巧和文档礼仪Axure高级技巧和文档礼仪
Axure高级技巧和文档礼仪
 
手机助手Phone端竞品分析
手机助手Phone端竞品分析手机助手Phone端竞品分析
手机助手Phone端竞品分析
 
新版阿尔法城背后的前端MVC实践
新版阿尔法城背后的前端MVC实践新版阿尔法城背后的前端MVC实践
新版阿尔法城背后的前端MVC实践
 
最终 大屏手机上的设计策略
最终 大屏手机上的设计策略最终 大屏手机上的设计策略
最终 大屏手机上的设计策略
 
Let's Redux!
Let's Redux!Let's Redux!
Let's Redux!
 
从钢铁侠与美国队长看用户体验
从钢铁侠与美国队长看用户体验从钢铁侠与美国队长看用户体验
从钢铁侠与美国队长看用户体验
 
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
 
塑造产品核心亮点的设计
塑造产品核心亮点的设计塑造产品核心亮点的设计
塑造产品核心亮点的设计
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索
 
设计好的用户体验 郑磊
设计好的用户体验 郑磊设计好的用户体验 郑磊
设计好的用户体验 郑磊
 
CardKit & DOMO UI - 移动时代技术与设计的十字路口
CardKit & DOMO UI - 移动时代技术与设计的十字路口CardKit & DOMO UI - 移动时代技术与设计的十字路口
CardKit & DOMO UI - 移动时代技术与设计的十字路口
 
李成银:前端编译平台
李成银:前端编译平台李成银:前端编译平台
李成银:前端编译平台
 
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
 

Semelhante a Git 零基础介绍

Git Version Control System
Git Version Control SystemGit Version Control System
Git Version Control SystemKMS Technology
 
David Krmpotic: Git
David Krmpotic: GitDavid Krmpotic: Git
David Krmpotic: GitSlo-Tech
 
Basics About Git & GitHub
Basics About Git & GitHubBasics About Git & GitHub
Basics About Git & GitHubRaiful Hasan
 
インフラエンジニアのためのGit入門
インフラエンジニアのためのGit入門インフラエンジニアのためのGit入門
インフラエンジニアのためのGit入門Kouhei Maeda
 
January 2022: Central Iowa Linux Users Group: Git
January 2022: Central Iowa Linux Users Group: GitJanuary 2022: Central Iowa Linux Users Group: Git
January 2022: Central Iowa Linux Users Group: GitAndrew Denner
 
Davinci git brown_bag
Davinci git brown_bagDavinci git brown_bag
Davinci git brown_bagJason Noble
 
Introduction to git hub
Introduction to git hubIntroduction to git hub
Introduction to git hubNaveen Pandey
 
Getting started with GIT
Getting started with GITGetting started with GIT
Getting started with GITpratz0909
 
git and github-1.pptx
git and github-1.pptxgit and github-1.pptx
git and github-1.pptxtnscharishma
 
Git for uninitiated
Git for uninitiatedGit for uninitiated
Git for uninitiatedJohn C. Chan
 
Git essential training & sharing self
Git essential training & sharing selfGit essential training & sharing self
Git essential training & sharing selfChen-Tien Tsai
 

Semelhante a Git 零基础介绍 (20)

Using GIT
Using GITUsing GIT
Using GIT
 
Git Version Control System
Git Version Control SystemGit Version Control System
Git Version Control System
 
Git and Github
Git and GithubGit and Github
Git and Github
 
Dcvs
DcvsDcvs
Dcvs
 
David Krmpotic: Git
David Krmpotic: GitDavid Krmpotic: Git
David Krmpotic: Git
 
Basics About Git & GitHub
Basics About Git & GitHubBasics About Git & GitHub
Basics About Git & GitHub
 
Git para novatos
Git para novatosGit para novatos
Git para novatos
 
インフラエンジニアのためのGit入門
インフラエンジニアのためのGit入門インフラエンジニアのためのGit入門
インフラエンジニアのためのGit入門
 
January 2022: Central Iowa Linux Users Group: Git
January 2022: Central Iowa Linux Users Group: GitJanuary 2022: Central Iowa Linux Users Group: Git
January 2022: Central Iowa Linux Users Group: Git
 
Git (FS and DVCS)
Git (FS and DVCS)Git (FS and DVCS)
Git (FS and DVCS)
 
Git Without Puns
Git Without PunsGit Without Puns
Git Without Puns
 
Git Presentation
Git PresentationGit Presentation
Git Presentation
 
Davinci git brown_bag
Davinci git brown_bagDavinci git brown_bag
Davinci git brown_bag
 
Introduction to git hub
Introduction to git hubIntroduction to git hub
Introduction to git hub
 
Beginning git
Beginning gitBeginning git
Beginning git
 
Getting started with GIT
Getting started with GITGetting started with GIT
Getting started with GIT
 
Git! Why? How?
Git! Why? How?Git! Why? How?
Git! Why? How?
 
git and github-1.pptx
git and github-1.pptxgit and github-1.pptx
git and github-1.pptx
 
Git for uninitiated
Git for uninitiatedGit for uninitiated
Git for uninitiated
 
Git essential training & sharing self
Git essential training & sharing selfGit essential training & sharing self
Git essential training & sharing self
 

Último

Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 

Último (20)

Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 

Git 零基础介绍

  • 1. Git 网易有道 张宇辰 Monday, February 27, 12
  • 2. Agency • Git 历史 • 为什么用 Git • Git 基础知识 • 基本命令 • 暂存区与指针控制 (git reset/git checkout) • 与 SVN 协同 (git svn) Monday, February 27, 12
  • 3. Git 历史 源社区又一神作 Monday, February 27, 12
  • 4. Linus Torvalds • Linux 项目的发起者 • 痛恨 VCS&SVN • 大神、脾气火爆、非常固执 Monday, February 27, 12
  • 5. 1991~2002 大神只用邮件收集 源社区的 patch,手工集成到自己电脑里 手工集成……手工……手工……伤不起啊! 源社区 Monday, February 27, 12
  • 6. 2002∼2005 大神终于选了 Bitlocker 做版本控制,一个商业软件 商业软件……商业……商业…… 源社区 Monday, February 27, 12
  • 7. 2005 年,Bitlocker 结束了对 源社区的授权。 Monday, February 27, 12
  • 8. 2005 年,Bitlocker 结束了对 源社区的授权。 我只是好奇... Andrew Tridgell Monday, February 27, 12
  • 9. 2005 年,Bitlocker 结束了对 源社区的授权。 我只是好奇... 一夜回到解放前 Andrew Tridgell 源社区 Monday, February 27, 12
  • 10. 2005 年,Bitlocker 结束了对 源社区的授权。 自己写一个! 我只是好奇... 一夜回到解放前 Andrew Tridgell 源社区 Linus Torvalds Monday, February 27, 12
  • 11. • 2005 年 4 月 3 日, 始 发 Git • 同年 4 月 6 日,项目发布 • 同年 4 月 7 日,Git 作为自身的项目控制工具,仅仅用了 5 天 • 同年 4 月 18 日,第一次多分支合并 • 同年 4 月 29 日,Linus 表示对 Git 的性能满意了 • 同年 6 月 16 日,Linux 2.6.12 发布, 始用 Git 维护,此时仅仅经过 74 天 Monday, February 27, 12
  • 12. Git 今日 Perl 3,500,000+ repositories Qt Monday, February 27, 12
  • 13. 为什么选择 Git SVN 为什么不爽 Monday, February 27, 12
  • 14. Bad case • 发过程中接到紧急需求 • 等待 review 的代码污染工作区 • 离线 发怎么办 • 写 Log 时不知道写什么 Monday, February 27, 12
  • 15. SVN remote checkout working copy modify repository commit developer’s computer 所有的修改只能发生在没有版本控制的本地 working copy 中 Monday, February 27, 12
  • 16. Git remote pull local checkout working copy repository push repository commit developer’s computer Monday, February 27, 12
  • 17. Git remote pull local checkout working copy repository push repository commit developer’s computer 速度快 历史记录可控 可以离线工作 Monday, February 27, 12
  • 18. Git -- DVCS remote repository devA repository Distributed Version Control System devB repository ... Monday, February 27, 12
  • 19. 除此之外 • 无处不在的自动分页 (less) • diff 支持逐字比较 (git diff --word-diff) • 版本库又小又快 • 支持多 网络传输协议 (http/ssh) 以及更强大的 git 协议,可以显示传输进度 • 丰富且简单的 config 配置 Monday, February 27, 12
  • 21. Linux & Mac • Git: http://git-scm.com Monday, February 27, 12
  • 22. Windows • Cygwin + git (推荐) • 命令更丰富 • msysGit + TortoiseGit • 图形界面 • 对中文目录名和文件名处理有问题 Monday, February 27, 12
  • 23. Git 基础知识 Git 就是个文件系统 Monday, February 27, 12
  • 24. Git 内部对象 null Commit 1 Commit 2 Tree 1 Tree 2 FileA FileA 2 FileB FileC Monday, February 27, 12
  • 25. Git 内部对象 null Commit 1 Commit 2 Tree 1 Tree 2 FileA FileA 2 FileB FileC 一次提交中所有的文件 Monday, February 27, 12
  • 26. Git 内部对象 null Commit 1 Commit 2 Tree 1 Tree 2 FileA FileA 2 FileB FileC 一次提交 又一次提交 Monday, February 27, 12
  • 27. Git 内部对象 null Commit 1 Commit 2 Tree 1 Tree 2 同一个文件的历史版本 FileA FileA 2 FileB FileC Monday, February 27, 12
  • 28. Git 内部对象 null Commit 1 Commit 2 HEAD 提交对象不可变且拥全局唯一 id 除第一个提交外,每个提交都保存上一个提交的引用 -- Git 里面就是个大链表 Monday, February 27, 12
  • 30. 不是检出 git clone remote_repo_url (checkout) 克隆一份远程仓库成为本地仓库 remote clone local checkout working copy repository repository Monday, February 27, 12
  • 31. remote commit repository 239d5 master clone origin/master local commit repository 239d5 master HEAD checkout working copy Monday, February 27, 12
  • 32. HEAD: 指向当前工作的 branch master: 默认的主干分支指针 origin/master: 远程仓库 origin 中 master 分支的指针 origin: 远程仓库名,在 git clone 时默认创建 commit origin/master 239d5 master HEAD Monday, February 27, 12
  • 33. echo “hello” > world git add world 将文件加入版本库 svn add commit origin/master 239d5 master HEAD Monday, February 27, 12
  • 34. git commit -m “init commit” 第一个提交 svn commit origin/master commit commit 239d5 7ca54 master HEAD Monday, February 27, 12
  • 35. git push origin master 将本地仓库推送到远程仓库上 svn commit Monday, February 27, 12
  • 36. remote commit repository 239d5 master origin/master local commit repository 239d5 master HEAD commit working copy Monday, February 27, 12
  • 37. remote commit repository 239d5 master origin/master local commit commit repository 239d5 7ca54 master HEAD commit working copy Monday, February 27, 12
  • 38. remote commit commit repository 239d5 7ca54 master push origin/master local commit commit repository 239d5 7ca54 master HEAD commit working copy Monday, February 27, 12
  • 39. remote commit commit repository 239d5 7ca54 master push origin/master local commit commit repository 239d5 7ca54 master HEAD commit working copy Monday, February 27, 12
  • 40. Git 分支 git branch featureA git checkout featureA 在本地仓库创建一个分支 origin/master master commit 7ca54 featureA HEAD Monday, February 27, 12
  • 41. Git 分支 git branch -a 查看所有分支 master * foo remotes/origin/master origin/master master commit 7ca54 reatureA HEAD Monday, February 27, 12
  • 42. Git 分支 echo “r2” >> world; git add world; git commit -m ‘r2’ origin/master master commit 7ca54 reatureA HEAD Monday, February 27, 12
  • 43. Git 分支 echo “r2” >> world; git add world; git commit -m ‘r2’ origin/master master commit commit 7ca54 6539d featureA HEAD Monday, February 27, 12
  • 44. Git 分支切换 git checkout master origin/master master commit commit 7ca54 6539d featureA HEAD Monday, February 27, 12
  • 45. Git 分支切换 git checkout master origin/master master HEAD commit commit 7ca54 6539d featureA Monday, February 27, 12
  • 46. Git 分支切换 git merge master 快进 (fast forward) 合并 origin/master master HEAD commit commit 7ca54 6539d featureA Monday, February 27, 12
  • 47. Git 分支合并 git merge featureA 快进 (fast forward) 合并 origin/master master HEAD commit commit 7ca54 6539d featureA Monday, February 27, 12
  • 48. Git 分支合并 git branch -d featureA origin/master master HEAD commit commit 7ca54 6539d featureA Monday, February 27, 12
  • 49. Git 分支合并 git branch -d featureA origin/master master HEAD commit commit 7ca54 6539d Monday, February 27, 12
  • 50. Git 冲突解决 remote commit commit repository 7ca54 ae78f master push origin/master local commit commit repository 7ca54 6539d master HEAD working copy Monday, February 27, 12
  • 51. Git 冲突解决 git push 类似 svn 的 out of date 提示 Monday, February 27, 12
  • 52. remote commit commit repository 7ca54 ae78f master pull origin/master local commit commit repository 7ca54 6539d master HEAD working copy Monday, February 27, 12
  • 53. remote commit commit repository 7ca54 ae78f master pull local commit commit repository 7ca54 6539d master HEAD commit ae78f working copy origin/master Monday, February 27, 12
  • 54. remote commit commit repository 7ca54 ae78f master pull local commit commit repository 7ca54 6539d master HEAD commit commit ae78f 36dc2 working copy origin/master Monday, February 27, 12
  • 55. remote commit commit repository 7ca54 ae78f master pull local commit commit repository 7ca54 6539d commit commit ae78f 36dc2 master HEAD working copy origin/master Monday, February 27, 12
  • 56. remote commit commit repository 7ca54 ae78f master push local commit commit repository 7ca54 6539d commit commit ae78f 36dc2 master HEAD working copy origin/master Monday, February 27, 12
  • 57. commit commit 7ca54 ae78f master remote repository commit commit 6539d 36dc2 push local commit commit repository 7ca54 6539d commit commit ae78f 36dc2 master HEAD working copy origin/master Monday, February 27, 12
  • 58. commit commit 7ca54 ae78f remote repository commit commit 6539d 36dc2 master push local commit commit repository 7ca54 6539d commit commit ae78f 36dc2 master HEAD working copy origin/master Monday, February 27, 12
  • 59. 暂存区与指针控制 git add git checkout git reset Monday, February 27, 12
  • 60. Git 暂存区 工作区 版本库 a.js 暂存区 HEAD b.js master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 61. Git 暂存区 git add a.js b.js 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 62. Git 暂存区 git commit 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 63. Git 暂存区 git commit 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js commit commit 86dea 763da Monday, February 27, 12
  • 64. Git 暂存区 git commit 工作区 版本库 a.js HEAD b.js master commit commit 暂存区 86dea 763da a.js b.js Monday, February 27, 12
  • 65. Git 暂存区 git commit 工作区 版本库 a.js HEAD b.js master commit commit 暂存区 86dea 763da a.js b.js Monday, February 27, 12
  • 66. Git 暂存区 git commit 工作区 版本库 a.js HEAD b.js master commit commit 暂存区 86dea 763da a.js b.js Monday, February 27, 12
  • 67. Git 暂存区 git commit 工作区 版本库 a.js HEAD b.js master commit commit 86dea 763da Monday, February 27, 12
  • 68. Git 暂存区 工作区 版本库 a.js HEAD b.js master commit commit 86dea 763da Monday, February 27, 12
  • 69. Git 暂存区 工作区 版本库 a.js HEAD b.js master commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 70. Git 暂存区 工作区 版本库 a.js HEAD b.js master commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 71. Git 暂存区 工作区 版本库 a.js HEAD b.js master commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 72. Git 暂存区 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 73. Git 分支指针控制 git reset --soft 763da 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 74. Git 分支指针控制 git reset --soft 763da 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js 1 commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 75. Git 分支指针控制 git reset [--mixed] 763da 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js 1 commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 76. Git 分支指针控制 git reset [--mixed] 763da 工作区 版本库 a.js 暂存区 HEAD b.js master 2 1 commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 77. Git 分支指针控制 git reset --hard 763da 工作区 版本库 a.js 暂存区 HEAD b.js master 2 1 commit commit commit 86dea 763da 12caa Monday, February 27, 12
  • 78. Git 分支指针控制 git reset --hard 763da 工作区 版本库 3* 暂存区 HEAD master 2 1 commit commit commit 86dea 763da 12caa * 此处仅做演示 --hard 的效果,实际上 git 不会删除暂存区中不存在的文件,只会添加新文件和重置文件修改 Monday, February 27, 12
  • 79. Git 分支指针控制 git reset --soft: 1 --mixed: 1 & 2 版本库 --hard: 1 & 2 & 3 暂存区 HEAD master 3* 2 I’m lost* 1 工作区 commit commit commit a.js 86dea 763da 12caa b.js * 可以通过 git reflog 查看 HEAD 指针最近的移动历史 Monday, February 27, 12
  • 80. Git 分支指针控制 3 == git checkout . 版本库 暂存区 HEAD master 3 2 1 工作区 commit commit a.js 86dea 763da b.js Monday, February 27, 12
  • 81. Git HEAD 指针控制 git checkout 86dea 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 82. Git HEAD 指针控制 git checkout 86dea 工作区 版本库 a.js 暂存区 HEAD b.js a.js master b.js 1 commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 83. Git HEAD 指针控制 git checkout 86dea 工作区 版本库 a.js 暂存区 HEAD b.js master 2 1 commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 84. detached HEAD 状态 git checkout 86dea Note: checking out '86dea'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 78f871f... remove doc HEAD master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 85. detached HEAD 状态 HEAD commit 45cdd master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 86. detached HEAD 状态 git checkout master HEAD commit 45cdd master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 87. detached HEAD 状态 I’m lost HEAD commit 45cdd master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 88. 在 detached HEAD 状态上创建分支 git checkout -b branch HEAD branch commit 45cdd master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 89. 在 detached HEAD 状态上创建分支 git checkout master branch HEAD commit 45cdd master commit commit commit 7dae1 86dea 763da Monday, February 27, 12
  • 90. 修改历史记录 git rebase Monday, February 27, 12
  • 91. 通过 rebase 合并分支 git rebase master commit 832ac foo HEAD commit commit 7ca54 6539d master Monday, February 27, 12
  • 92. 通过 rebase 合并分支 git rebase master foo HEAD commit 832ac commit commit 7ca54 6539d master Monday, February 27, 12
  • 93. 通过 rebase 合并分支 git rebase master foo HEAD commit 832ac commit commit 7ca54 6539d master Monday, February 27, 12
  • 94. 通过 rebase 合并分支 git rebase master foo HEAD commit 832ac commit commit commit 7ca54 6539d 35ce5 master Monday, February 27, 12
  • 95. 通过 rebase 合并分支 git rebase master foo HEAD commit 832ac commit commit commit 7ca54 6539d 35ce5 master Monday, February 27, 12
  • 96. 通过 rebase 合并分支 git rebase master foo HEAD commit 832ac commit commit commit 7ca54 6539d 35ce5 master Monday, February 27, 12
  • 97. 通过 rebase 合并分支 git rebase master foo HEAD commit 832ac commit commit commit 7ca54 6539d 35ce5 master Monday, February 27, 12
  • 98. 通过 rebase 合并分支 git checkout master; git merge foo foo HEAD commit 832ac commit commit commit 7ca54 6539d 35ce5 master Monday, February 27, 12
  • 99. 通过 rebase 合并分支 git checkout master; git merge foo foo commit 832ac commit commit commit 7ca54 6539d 35ce5 master HEAD Monday, February 27, 12
  • 100. 通过 rebase 合并分支 Pros: 提交记录更简单 Cons: 操作略微 杂 HEAD master commit commit commit 7ca54 6539d 35ce5 Monday, February 27, 12
  • 101. Git + SVN 协同 Monday, February 27, 12
  • 102. git svn clone -r 310135:HEAD --trunk=trunk --branches=branches --branches=milestones https://..../YNote/Client Monday, February 27, 12
  • 103. git 命令 svn 命令 git pull svn update git push svn commit Monday, February 27, 12
  • 104. git 命令 git svn 胶水命令 svn 命令 git pull git svn rebase svn update git push git svn dcommit svn commit Monday, February 27, 12
  • 106. Git revert commit commit 239d5 7ca54 master HEAD a.js +++ Monday, February 27, 12
  • 107. Git revert commit commit commit 239d5 7ca54 7865a master HEAD a.js +++ a.js --- Monday, February 27, 12
  • 108. git commit --amend MOD: blahblah commit commit 239d5 7ca54 master HEAD Monday, February 27, 12
  • 109. git commit --amend Monday, February 27, 12
  • 110. git commit --amend MOD: blahblah commit commit 239d5 7ca54 commit 7ca54 master HEAD MOD: ... Monday, February 27, 12
  • 111. 通过 rebase 合并提交记录 git rebase -i origin/master # -i 进入交互式 rebase origin/master HEAD commit 7ca54 master commit commit 6539d 35ce5 Monday, February 27, 12
  • 112. 通过 rebase 合并提交记录 git rebase -i origin/master # -i 进入交互式 rebase origin/master HEAD commit commit 7ca54 d32ab master commit commit 6539d 35ce5 Monday, February 27, 12
  • 113. 通过 rebase 合并提交记录 git rebase -i origin/master # -i 进入交互式 rebase origin/master HEAD commit commit 7ca54 d32ab master Monday, February 27, 12
  • 114. 通过 rebase 丢弃提交记录 git rebase -i origin/master # -i 进入交互式 rebase origin/master HEAD commit 7ca54 master commit commit 6539d 35ce5 Monday, February 27, 12
  • 115. 通过 rebase 丢弃提交记录 git rebase -i origin/master # -i 进入交互式 rebase origin/master HEAD commit commit 7ca54 d32ab master commit commit 6539d 35ce5 Monday, February 27, 12
  • 116. Git rebase tip • 文件只要进了 git 的版本库,就是安全的 • rebase 本质上是基于已有提交构造新提交 • 永远不要 rebase 已经推送到公共仓库的提交 Monday, February 27, 12
  • 118. Pro git 免费的在线电子书 http://progit.org Monday, February 27, 12
  • 120. Q&A 张宇辰 zhangyc@rd.netease.com git 学习 POPO 群: 1195049 Monday, February 27, 12