本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Git从0开始
1.下载git
2.从git账号开始
通过命令行使用git你首先需要设置你的账号
$ git config --global user.name "[name]"
$ git config --global user.email "[email address]"
# 设置了这个全局配置之后,你的git操作就会关联上以上配置信息
# 上述配置是全局的,每一个本地仓库还可以配置不同的git账号
3.开始初始化代码仓库
git是一个开源的分布式版本控制系统,分布式的意思就是在你本地也会有代码仓库
#1. 初始化本地目录为代码仓库
git init #不带参数的情况就是直接将当前目录作为代码仓库的根目录
git init project #带参数project则会在当前目录下创建project目录作为代码仓库的根目录
#一下为创建成功后的输出
Initialized empty Git repository in C:/Users/***/project/.git/
#2.从服务器克隆一个仓库
git clone https://gitee.com/itsay/resume.git #拉取远程仓库代码并在本地创建resume目录(和服务端同名)
git clone https://gitee.com/itsay/resume.git resume2 #拉取远程仓库代码并在本地创建resume2目录(和服务端不同)
4.将代码提交到本地仓库
git add 文件/目录 #根文件的话只是追踪一个文件,跟目录的话,会把这个目录下的文件全部添加到本地仓库
git unset 文件 #不再跟踪这个文件的变化,但是不会回滚这个文件的内容分
git commit -m "[备注信息]" #提交快照信息到本地仓库
#快捷的写法可以是
git commit -am "[备注信息]" #快速追踪并提交快照信息
git rm 文件 #删除这个文件,并记录删除状态,在同步(push)到git服务器时,也会删除服务器上的文件
git rm --cached 文件 #不删除本地文件,记录删除状态,在同步(push)到git服务器时,也会删除服务器上的文件,当你不想追踪文件时可以用
git status #查看本地仓库的状态
git push #提交本地仓库信息到远程仓库、可能需要密码或者需要你配置git服务器端秘钥
5.代码版本维护以及代码合并
git log #查看当前分支代码的历史版本信息、就是你之前commit带的内容
git pull #拉取服务端的最新代码 其实就是 git fetch + git merge
git branch #显示项目的本地仓库的所有分支
git branch 分支名 #创建新的分支
git checkout 分支名 #将当前目录切换到指定的分支 当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
git merge 分支名 #将特定分支的历史信息合并到当前分支
git branch -d 分支名 #删除指定分支,一般是创建分支做开发,开发完成后合并到主分支,不需要的分支可以删除
git reset [commit]#重置改状态到上一个本地快照版本,例如你错误的添加了文件,可以指定commit快照版本,不指定就是最近的一个快照版本,不过变更的信息会保留下来
git reset --hard #同上,会强制的修改本地仓储,直接丢弃所有历史信息和修改信息
git tag #查看代码的标签,我们可以为每个阶段的代码打上标签方便我们维护和管理代码
git tag -a '[tag名字]' '[commit]' #为提交版本打标签
6.Git仓库的工作区、暂存区和版本库
-
图中左侧为工作区,右侧为版本库。在版本库中标记为 "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 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。