Git 是一个免费和开源的 分布式版本控制系统,旨在以速度和效率处理从小型到大型项目的所有内容。Git易于学习, 占用空间小,性能快如闪电。它优于 SCM 工具,如 Subversion、CVS、Perforce 和 ClearCase,具有廉价的本地分支、方便的暂存区域和 多个工作流等功能。注意:Git是一个版本控制工具,GitHub是一个用Git做版本控制的项目托管平台。
一、Git官网及下载安装教程
Git官网:点击打开Git官网
Git安装教程:点击打开《Git - Windows上安装》文章
二、学习文章(建议仔细阅读并理解)
三、Git部分命令及案例个人理解
- 首先自行创造一个Git项目环境,那么必先创建选择好本地Git项目路径(博主举例如下图)。
- 打开Git Bash控制台。
- 把当前位置从根目录移动到之前已经选择好本地Git项目路径(博主的本地Git项目路径绝对路径为F:/gitproject/Myproject/test)。
cd /本地Git项目路径绝对路径
- Git项目环境初始化。
git init
- 可以在Git项目中生成文件如字符串内容str文件(博主创建了两个txt文本文件)。
echo str > file
- 将生成或者修改后的文件添加到Git环境的索引区或者暂存区,注意:项目中.git/objects此时开始生成。
git add 需要添加到暂存区的文件(可采用正则表达式)
- 注意:git log 命令必须等到commits之后才行,仅仅存放到暂存区的文件无法查询(见下图)。
- 查看项目中.git/objects路径文件下已经添加到暂存区文件的存储哈希值H。
find .git/objects
- 上一步执行后都可以进一步根据objects路径文件中各哈希值查看对应的文件存储内容及类型(-p 文件存储内容,如文件内容str;-t 存储对象objects类型,如blob/tree/commit)。
git cat-file -p/-t 哈希值H(值的前4个字即可代表整个对应的哈希值)
- 将之前add添加存放到索引区或暂存区的所有文件提交到local仓库中。注意:文字内容W主要是解释提交的文件的概述。
git commit -m "任意合理文字W添加"
- 查看项目中.git/objects路径文件下已经提交到local(git 仓库)中文件的存储哈希值H‘。
find .git/objects
- 上一步执行后都可以进一步根据objects路径文件中各哈希值查看对应的文件存储内容及类型(-p 文件存储内容,如文件内容str;-t 存储对象objects类型,如blob/tree/commit)。
git cat-file -p/-t 哈希值H’(值的前4个字即可代表整个对应的哈希值)
四、本地仓库的主要git命令
- 查看HEAD指针指向的branch的commit哈希值
cat .git/HEAD cat .git/refs/heads/branch
- 创建分支
git branch X
- 移动HEAD指针到别的分支X(同时新创建)
git checkout X (git checkout -b X)
- 合并分支
git meger X(HEDA动) git rebase X(HEAD所在分支一起动)
- HEAD与分支分离
git checkout commit哈希值
- HEAD前移(HEAD一个走)
git checkout 分支^ git checkout 分支~数字
- 分支前移(以HEAD具体位置为参考点)
git branch -f 分支 HEAD^ git branch -f 分支 HEAD~数字
- 撤销命令,HEAD前移(HEAD分支一起走),导致原来提交的纪录会消失
git reset 分支(HEAD)^ git reset 分支(HEAD)~数字
- 撤销的提交记录后面居然多了一个新提交,新提交引入撤销,状态回溯到撤销前的状态
git revert 分支(HEAD) git revert 分支(HEAD)^ git revert 分支(HEAD)~数字
- 在HEAD上延伸各个记录(C1 C2 C3 …),并移动HEAD,记录之间可以无顺序,用空格隔开
git cherry-pick 记录
- 效果同上,只是记录根据HEAD的设置父节点数目等同
git rebase -i HEAD^ git rebase -i HEAD~数字
- 创建标签(某次提交记录名没有的设置则默认为HEAD指向的位置)
git tag 标签名 (某次提交记录名)
- 寻找离你最近的标签tag,若ref没有设置,默认为HEAD的位置,结果:tag+numCommits+hash(tag 表示的是离 ref 最近的标签,numCommits 是表示这个 ref 与 tag 相差有多少个提交记录,hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位,当 ref 提交记录上有某个标签时,则只输出标签名称)
git describe ref
- 寻找产生Bug的提交记录
git bisect
- (不断补充中,敬请收藏)
五、远程仓库的主要git命令
- 从技术上来讲,git clone 命令在真实的环境下的作用是在本地创建一个远程仓库的拷贝(比如从 github.com),克隆GitHub上的项目T,将远程项目库的项目T复制到本地local中
git clone T的路径
- 从远程仓库获取数据,从远程仓库下载本地仓库中缺失的提交记录,更新远程分支指针
git fetch 通信协议
- 从指定的远程仓库抓取更新记录再合并到本地分支
git pull
- 将本地变更记录上传到指定的远程仓库,并在远程仓库上合并你的新提交记录,git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关。它的默认值取决于你正使用的 Git 的版本,在你的项目中进行推送之前,最好检查一下这个配置。
git push