- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
01课程综述
版本管理:
集中式管理系统VCS
分布式管理系统VCS:服务器和客户端都有完整的版本库
git特点:
- 最优存储能力
- 非凡的性能
- 开源
- 很容易备份
- 支持离线操作
- 很容易定制工作流程
git三剑客:git github gitlab
02安装GIT
官网安装git
03使用Git之前需要做的最小配置
配置user信息:
- 配置user.name
$git config --global user.name “your_name” - 配置user.email
$git config --global user.email “your_email@domin.com”
config的三个作用域:
- local:只对某个仓库有效
- global对当前所有仓库有效
- system对系统所有登陆的用户有效
- 缺省等于local
显示config的配置,加–list:
- git config --list --global
- git config --list --local
- git config --list --system
04创建第一个仓库并配置local用户信息
建GIT仓库:
1 把已有的项目代码纳入git管理
$ cd 项目代码所在的文件夹
$ git init
2 新建项目直接用GIT管理
$ cd 某个文件夹
$ git init your_project #会在当前路径下创建和项目名称同名的文件夹
$ cd your_project
3 git 命令
$ git clone [url] # 下载一个项目和它的整个代码历史
$ git config -e [--global] # 编辑Git配置文件
$ git add [file1] [file2] ... # 添加指定文件到暂存区
$ git add [dir] # 添加指定目录到暂存区,包括子目录
$ git add . # 添加当前目录的所有文件到暂存区
$ git commit -m [message] # 提交暂存区到仓库区
$ git commit [file1] [file2] ... -m [message] # 提交暂存区的指定文件到仓库区
$ git commit -a # 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -v # 提交时显示所有diff信息
$ git log # 显示当前分支的版本历史
$ git status # 显示有变更的文件
05通过几次commit来认识工作区和暂存区
$ git add # 进暂存区
$ git add -u # 已经管理的文件进暂存区
$ git commit -m [message] # 进仓库
06给文件重命名的简便方法
$ git add 新文件名 # 进暂存区
$ git rm 原文讲名 # 已经管理的文件进暂存区
$ git commit -m [message] # 进仓库
第二种:
$ git mv 原文件名 新文件名 # 重命名,直接在暂存器改了
07通过gitlog查看版本演变历史
$ git log --oneline # 简洁的观看历史
$ git log -n4 # 查看最近的4次提交,所有分支
$ git log --all # 查看所有分支版本信息
$ git log --graph # 以图的形式查看所有分支版本信息
08gitk:通过图形界面工具来查看版本历史
09探密.git目录
HEAD :指向分支 可以切换分支
config:跟仓库相关的信息,user信息等
refs:heads分支 tags标签(里程碑)
object:存了文件
文件类型:commit blob tree tag
10commit、tree和blob三个对象之间的关系
blob跟文件名没关系,只要文件相同就是同一个blob
11小练习:数一数tree的个数
12分离头指针情况下的注意事项
detached HEAD
分离头指针,没有branch跟他连接,可以做变更,但是切换分支时如果想保留,必须跟branch连接
13进一步理解HEAD和branch
HEAD可以指代新分支的最后一次提交
HEAD也可以不跟分支挂钩
HEAD最终是会落脚到某一个commit
新建或者切换branch,HEAD会跟着变
14怎么删除不需要的分支?
$ git branch # 列出所有本地分支
$ git branch -r # 列出所有远程分支
$ git branch -a # 列出所有本地分支和远程分支
$ git branch [branch-name] # 新建一个分支,但依然停留在当前分支
$ git checkout -b [branch] # 新建一个分支,并切换到该分支
$ git branch [branch] [commit] # 新建一个分支,指向指定commit
$ git branch --track [branch] [remote-branch] # 新建一个分支,与指定的远程分支建立追踪关系
$ git checkout [branch-name] # 切换到指定分支,并更新工作区
$ git checkout - # 切换到上一个分支
$ git merge [branch] # 合并指定分支到当前分支
$ git cherry-pick [commit] # 选择一个commit,合并进当前分支
$ git branch -d [branch-name] # 删除分支
$ git branch -v # 查看分支
15怎么修改最新commit的message?
$ git commit -a # 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -v # 提交时显示所有diff信息
$ git commit --amend -m [message] # 使用一次新的commit,替代上一次提交, 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend [file1] [file2] ... # 重做上一次commit,并包括指定文件的新变化
16怎么修改老旧commit的message?
$ git rebase -i 父类的哈希值 #然后根据提示来
17怎样把连续的多个commit整理成1个?
$ git rebase -i 父类的哈希值 #然后根据提示来
18怎样把间隔的几个commit整理成1个?
19怎么比较暂存区和HEAD所含文件的差异?
$ git diff # 显示暂存区和工作区的差异
$ git diff -- 文件名# 显示暂存区和工作区的某个文件的差异
$ git diff --cached [file] # 显示暂存区和上一个commit的差异
$ git diff HEAD # 显示工作区与当前分支最新commit之间的差异
$ git diff [first-branch]...[second-branch] # 显示两次提交之间的差异
$ git diff --shortstat "@{0 day ago}" # 显示今天你写了多少行代码
20怎么比较工作区和暂存区所含文件的差异?
21如何让暂存区恢复成和HEAD的一样?
$ git reset HEAD
22如何让工作区的文件恢复为和暂存区一样?
$ git checkout -- 文件名
23怎样取消暂存区部分文件的更改?
$ git reset HEAD -- 文件名
24消除最近的几次提交
git reset --hard 要保留的commit的哈希码
25看看不同提交的指定文件的差异
git diff commit1 commit2 -- 文件名 # 比较两个commit中某个文件的差异
26正确删除文件的方法
git rm 文件名 # git直接把暂存区文件删除
27开发中临时加塞了紧急任务怎么处理?
$ git stash #临时存起来
$ git stash list
$ git stash apply # 存放内容取出来放到工作区,但是stash里边还有
$ git stash pop # 工作区放入,但是stash里丢掉
28如何指定不需要Git管理的文件?
.gitignore 里边填写文件格式
29如何将Git仓库备份到本地?
哑协议和智能协议:
直观区别:哑协议传输进度不可见;智能协议传输可见
传输速度:智能协议快
$ git fetch [remote] # 下载远程仓库的所有变动
$ git remote -v # 显示所有远程仓库
$ git remote show [remote] # 显示某个远程仓库的信息
$ git remote add [shortname] [url] # 增加一个新的远程仓库,并命名
$ git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并
$ git push [remote] [branch] # 上传本地指定分支到远程仓库
$ git push [remote] --force # 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --all # 推送所有分支到远程仓库
30注册一个GitHub账号
31配置公私钥
可以粘贴到不同的服务器,不需要每次都创建
直接上官网可以看讲解
32在GitHub上创建个人仓库
.gtiignore licenses
33把本地仓库同步到GitHub
$ git remote -v # 显示所有远程仓库
$ git remote show [remote] # 显示某个远程仓库的信息
$ git remote add [shortname] [url] # 增加一个新的远程仓库,并命名
$ git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并
$ git push [remote] [branch] # 上传本地指定分支到远程仓库
$ git push [remote] --all # 推送所有分支到远程仓库