Git使用教程

01、Git简介

    Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是 Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放 源码 的版本控制软件。 Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。

    1.1、特点介绍

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
如图所示是经典的git开发过程。
Git使用教程_第1张图片

1.2、Git的功能特性

从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。

优点:
     适合 分布式开发 ,强调个体。
    公共服务器压力和数据量都不会太大。
    速度快、灵活。
    任意两个开发者之间可以很容易的解决冲突。
     离线工作。
缺点:
资料少(起码中文资料很少)。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

02、Git使用安装

官网地址: Git    
    

    2.1、windows下载安装

Git使用教程_第2张图片
Git使用教程_第3张图片
Git使用教程_第4张图片
    安装包下载完成之后双击,一直下一步。

    2.2、linux下载安装

这里我就不介绍linux安装Git,大多数还是在windows上安装,如果需要可以百度一下。

03、Git的常用命令

3.1、常用命令

    3.1.1、克隆代码(下载代码)

                git clone
    

    3.1.2、查看日志(查看提交记录)

                git log 

    3.1.3、查看标签

                git tag

    3.1.4、查看分支

                git branch

    3.1.5、查看远程分支

                git branch -a 

    3.1.6、拉取代码(更新代码)

                git pull

    3.1.7、查看变更文件状态

                git status

3.2、新建代码

    3.2.1、在当前目录新建一个Git代码库

git init
    

    3.2.2、 新建一个目录,将其初始化为Git代码库

git init [project-name]
    

    3.2.3、 下载一个项目和它的整个代码历史

git clone [url]

3.3、配置

    3.3.1、 显示当前的Git配置

git config --list
    

    3.3.2、 编辑Git配置文件

git config -e [--global]
    

    3.3.3、 设置提交代码时的用户信息

git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

3.4、增加/删除文件

    3.4.1、添加指定文件到暂存区

git add [file1] [file2] ...
    

    3.4.2、 添加指定目录到暂存区,包括子目录

git add [dir]
    

    3.4.3、 加当前目录的所有文件到暂存区

git add .
    

    3.4.4、 删除工作区文件,并且将这次删除放入暂存区

git rm [file1] [file2] ...
    

    3.4.5、 停止追踪指定文件,但该文件会保留在工作区

git rm --cached [file]
    

    3.4.6、 改名文件,并且将这个改名放入暂存区

git mv [file-original] [file-renamed]

3.5、提交代码

    3.5.1、 提交暂存区到仓库区

git commit -m [message]
    

    3.5.2、 提交暂存区的指定文件到仓库区

git commit [file1] [file2] ... -m [message]
    

    3.5.3、 提交工作区自上次commit之后的变化,直接到仓库区

git commit -a
    

    3.5.4、 提交时显示所有diff信息

git commit -v
    

    3.5.5、使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息

git commit --amend -m [message]
    

    3.5.6、 重做上一次commit,并包括指定文件的新变化

git commit --amend   ...

3.6、分支

    
    解释:
        branch-name / branch:分支名称
       
        

    3.6.1、 列出所有本地分支

git branch
    

    3.6.2、 列出所有远程分支

git branch -r
    

    3.6.3、 列出所有本地分支和远程分支

git branch -a
    

    3.6.4、 新建一个分支,但依然停留在当前分支

git branch [branch-name]
    

    3.6.5、 新建一个分支,并切换到该分支

git checkout -b [branch]
    

    3.6.6、 新建一个分支,指向指定commit

git branch [branch] [commit]
    

    3.6.7、 新建一个分支,与指定的远程分支建立追踪关系

git branch --track [branch] [remote-branch]
    

    3.6.8、 切换到指定分支,并更新工作区

git checkout [branch-name]
    

    3.6.9、 建立追踪关系,在现有分支与指定的远程分支之间

git branch --set-upstream [branch] [remote-branch]
    

    3.6.10、 合并指定分支到当前分支

git merge [branch]
    

    3.6.11、 选择一个commit,合并进当前分支

git cherry-pick [commit]
    

    3.6.12、 删除分支

git branch -d [branch-name]
    

    3.6.13、 删除远程分支

git push origin --delete
git branch -dr

3.7、标签

    3.7.1、 列出所有tag

git tag
    

    3.7.2、 新建一个tag在当前commit

git tag [tag]
    

    3.7.3、 新建一个tag在指定commit

git tag [tag] [commit]
    

    3.7.4、 查看tag信息

git show [tag]
    

    3.7.5、 提交指定tag

git push [remote] [tag]
    

    3.7.6、 提交所有tag

git push [remote] --tags
    

    3.7.7、 新建一个分支,指向某个tag

git checkout -b [branch] [tag]

3.8、查看

    3.8.1、 显示有变更的文件

git status
    

    3.8.2、 显示当前分支的版本历史

git log
    

    3.8.3、 显示commit历史,以及每次commit发生变更的文件

git log --stat
    

    3.8.4、 显示某个文件的版本历史,包括文件改名

git log --follow [file]
git whatchanged [file]
    

    3.8.5、 显示指定文件相关的每一次diff

git log -p [file]
    

    3.8.6、 显示指定文件是什么人在什么时间修改过

git blame [file]
    

    3.8.7、 显示暂存区和工作区的差异

git diff
    

    3.8.8、 显示暂存区和上一个commit的差异

git diff --cached []
    

    3.8.9、 显示工作区与当前分支最新commit之间的差异

git diff HEAD
    

    3.8.10、 显示两次提交之间的差异

git diff [first-branch]...[second-branch]
    

    3.8.11、 显示某次提交的元数据和内容变化

git show [commit]
    

    3.8.12、 显示某次提交发生变化的文件

git show --name-only [commit]
    

    3.8.13、 显示某次提交时,某个文件的内容

git show [commit]:[filename]
    

    3.8.14、 显示当前分支的最近几次提交

git reflog

3.9、远程同步

    3.9.1、 下载远程仓库的所有变动

git fetch [remote]
    

    3.9.2、 显示所有远程仓库

git remote -v
    

    3.9.3、 显示某个远程仓库的信息

git remote show [remote]
    

    3.9.4、 增加一个新的远程仓库,并命名

git remote add [shortname] [url]
    

    3.9.5、 取回远程仓库的变化,并与本地分支合并

git pull [remote] [branch]
    

    3.9.6、 上传本地指定分支到远程仓库

git push [remote] [branch]
    

    3.9.7、 强行推送当前分支到远程仓库,即使有冲突

git push [remote] --force
    

    3.9.8、 推送所有分支到远程仓库

git push [remote] --all
    

    3.9.9、 恢复暂存区的指定文件到工作区

git checkout [file]
    

    3.9.10、 恢复某个commit的指定文件到工作区

git checkout [commit] [file]
    

    3.9.11、 恢复上一个commit的所有文件到工作区

git checkout .
    

    3.9.12、 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

git reset [file]
    

    3.9.13、 重置暂存区与工作区,与上一次commit保持一致

git reset --hard
    

    3.9.14、 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

git reset [commit]
    

    3.9.15、 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

git reset --hard [commit]
    

    3.9.16、 重置当前HEAD为指定commit,但保持暂存区和工作区不变

git reset --keep [commit]
    

    3.9.17、 新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支

git revert [commit]

3.10、其他

    3.10.1、 生成一个可供发布的压缩包

git archive
    

    3.10.2、 备份当前工作区的内容

git stash
    

    3.10.3、 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容

git stash pop
    

    3.10.4、 显示Git栈内的所有备份

git stash list
    

    3.10.5、 清空Git栈

git stash clear

04、Git实践

    windows开发环境安装git工具之后,在git工具窗口是支持linux命令,所以我们可以如果想上传哪个目录的文件,可以进入哪个目录进行提交,但是要注意需要在打开工程目录的子目录里操作。

    4.1、登录Git账号

git config --global user.name "账号"
git config --global user.email "邮箱"

    4.2、如果使用的是gitee,拉取代码的时候会弹框让你登录你的gitee账号和密码

Git使用教程_第5张图片

    4.3、查看登录的账号

git config user.name

05、总结

    5.1、工作区,暂存区,版本区

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在  .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录  .git,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
Git使用教程_第6张图片
  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行  git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行  git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行  git rm --cached  命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行  git checkout . 或者  git checkout --  命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 当执行  git checkout HEAD . 或者  git checkout HEAD  命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

你可能感兴趣的:(技术总结,git)