目录
1.git下载地址:https://git-scm.com/downloads
2.git config的参数--local、--global、--system
4.基于旧版本号415c5c8086sg1371创建一个新的分支temp
5.refs/heads/master(或者temp)文件的内容是什么?
2.用git命令查看commit、tree、blob的类型和内容(hash值如上图所示)
3.新建的git仓库,有且仅有一个commit,仅包含/doc/readme,请问内含多少个tree,多少个blob?
1. “detached HEAD” 状态是什么?需要注意什么?
二十.开发中途,遇到紧急任务,需要保留当前工作状态,怎么做?
1.在仓库中新建文件“.gitignore”,只能叫这个文件名
2.在.gitignore文件中添加不需要git管理的文本或文件夹的通配符
3.将/c/Users/lincoco/Desktop/testgit/.git的变更同步到备份zhineng.git
7.协同开发时,不同的人在同一分支的同一文件相同位置进行修改,冲突如何处理
8.协同开发时,不同的人同时变更了文件名和文件内容如何处理?
4.协同工作时,禁止将公共的分支拉到本地后作rebase操作(历史不能被更改)
一.安装
1.下载地址:https://git-scm.com/downloads
2.在命令行检查是否安装成功:git --version
二.使用git之前的配置
1.配置user.name和user.email
#为git设置用户名和email
$git config --global user.name ‘your_name’
$git config --global user.email ‘your_email@domain.com’
2.git config的参数--local、--global、--system
$git config --local:只对某个仓库有效
$git config --global:对当前用户所有仓库有效
$git config --system:对系统所有登录的用户有效
3.显示config的配置,--list
$git config --list --local
$git config --list --global
$git config --list --system
三.建git仓库
1.把已有的项目代码纳入git管理
$cd 项目所在路径
$git init
2.新建的项目直接用git管理
$cd 某个文件夹
$git init project_name #会在当前路径下创建和项目名称同名的文件夹
$cd project_name
3.在新建的仓库配置local用户信息
按第二节命令
4.在项目目录新增一个文件newfile
$git add newfile
$git commit -m ‘add a newfile’
四.认识工作区和暂存区
1.暂存区处于版本管理流程的哪个部分?以及暂存区的好处?
工作目录的变更需要先添加到暂存区,再提交。尝试两套方案时,先把已完成的第一套方案放入暂存区,在试第二套方案,如果第二套方案不行,那么暂存区的第一套方案可以覆盖第二套方案;暂存区的内容已经被git管理了;暂存区的内容如果不合适可以回退。
2.四次提交练习
- # 加入index.html和image/*
$git status
$git add index.html images
$git commit -m ‘add index + log’
- # 加入style/style.css
$git add style
$git commit -m ‘Add style.css’
$git log
- # 加入js文件
$git add js
$git commit -m ‘Add js’
- #同时修改index.html和css文件
$git add -u #将被git管理的所有变更过的文件一起提交到暂存区
$git status
$git commit -m ‘Add message’
五.如何给文件重命名
1.直接按照commit思路进行重命名,以及有什么问题?
$mv readme readme.md #删除了readme,并且新增了readme.md
$git add readme.md #将readme.md加入git管理
$git rm readme #将readme从git管理删除
$git status #显示:readme—>readme.md
2.不想保留刚才的操作,即回滚,如何做?
$git reset --hard #该命令较危险,工作区和暂存区所有的变更都会被清理掉
$git status #此时工作路径下都是clean的
$git log #且没有破坏git的历史
3.一条命令如何重命名
$git mv readme readme.md #显示:readme—>readme.md
$git commit -m ‘Move readme to readme.md’ #直接commit,不需要add
六.用git log查看版本演变历史
1.一行显示历史
$git log --oneline
2.指定只查看最近的4次commit
$git log -n4 --oneline
3.查看本地有哪些分支
$git branch -v
4.基于旧版本号415c5c8086sg1371创建一个新的分支temp
$git checkout -b temp 415c5c8086sg1371
5.基于temp分支修改readme.md 文件
$git commit -am ‘Add test’ #-am 表示直接将工作区的内容提交到历史版本库中,不需要add
6.只看当前分支的历史
$git log
7.查看所有分支的历史
$git log --all
8.图形化展示所有分支的历史
$git log --all --graph
9.指定输出temp分支的log
$git log --oneline temp
七.用图形界面工具gitk查看版本历史
1.gitk --all
八..git目录
1..git目录里面有什么?
$cd .git
$ls -al
2.HEAD文件里面是什么?
$cat HEAD
- 里面是一个引用,指向refs/heads/master,说明当前仓库正在工作的分支是master
- 切换分支(git checkout temp)后,HEAD文件内的内容就会发生变化,指向temp
3.config文件里面是什么?
存储的local的config信息,如果直接在config文件内改变email或user的话,依然生效
4.refs文件夹里面是什么?
包括tags(标签)和heads(分支)
5.refs/heads/master(或者temp)文件的内容是什么?
$git cat-file -t 6a9802fdbdcd #查看6a9802fdbdcd是什么类型,结果显示是commit类型,表示master指针指向的commit
$git cat-file -p 6a9802fdbdcd #查看6a9802fdbdcd指向的内容
6.objects文件夹里面是什么?
进入objects中的98文件夹
blob指文件对象
九.commit, tree, blob三个git对象
1.git对象彼此关系
一个commit对应一棵tree,这个tree代表取出某个commit,这个commit对应一个视图,这个视图里面存放的一个快照,这个快照的集合里面存放了当前commit对应的本项目仓库的所有的文件夹以及文件的一个快照。一个文件夹也是一个tree,一个文件是一个blob,在git中,如果两个文件的内容完全一样,那么这两个文件指向同一个blob。
2.用git命令查看commit、tree、blob的类型和内容(hash值如上图所示)
$git cat-file -p 415c5c #显示上图蓝色区域部分
$git cat-file -p 912fa6 #显示上图黄色第一块区域
$git cat-file -p 6ad4c6 #显示上图绿色第一块区域,blob,文件内容,是一个html
3.新建的git仓库,有且仅有一个commit,仅包含/doc/readme,请问内含多少个tree,多少个blob?
$git init count_git_objects
$cd count_git_objects
$mkdir doc
$cd doc
$echo “hello, world”>readme
$cd ..
$find .git/objects -type f #空的
$git add doc
$ find .git/objects -type f #有一个对象,表示新的东西加入到暂存区
$git cat-file -t 2dadwd23 #是个blob
$ git cat-file -p 2dadwd23 # hello, world
$git commit -m ‘Add readme’
$ find .git/objects -type f #类型是文件的一共有4个,然后用cat-file查看类型和内容,一个commit,一个是blob,两个tree。
十.”detached HEAD”状态
1. “detached HEAD” 状态是什么?需要注意什么?
表示正工作在一个没有分支的状态下,比如不小心checkout到一个历史commit上,此时可以基于当前的commit继续变更或者commit,但是如果此时需要切到另一个分支master上修复一个bug,那么此时切分支时,刚刚工作的没有分支的状态上的commit就可能被git当作垃圾清理掉。这是分离头指针的危险的地方。
2.如何用好分离头指针?
有时想做一些尝试性的变更。可以用分离头指针,最后若想保留更改,那么可以根据warning 提示
3.分离头指针场景的演示
$git log #找到一个历史commit sddqde121
$git checkout sddqde121 #进入分离头指针状态,detached HEAD
- #修改一个文件
$git commit -am ‘Background to green’
$git log #发现这次commit只跟(HEAD)绑定在一起,而不是某个分支