1.Git初始化
安装完成 Git后,我们需要定制 Git 环境。 每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
1)/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
2)~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件,常用选项。
3)当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改
#全局
git config --global user.name "zbb" #配置git使用用户
git config --global user.email "xxxx@qq.com" #配置git使用邮箱
#本项目
#git config --local user.name "zbb" #配置git使用用户
#git config --local user.email "xxxx@qq.com" #配置git使用邮箱
git config --global color.ui true #语法高亮
git config --list # 查看全局配置
user.name=zbb
user.email=xxxx@qq.com
设置完成后在当前用户的家目录会生成.gitconfig文件:
[root@node1 ~]# ll .gitconfig
我们可以使用使用—help选项来查看git config命令的其他用法
git help
git --help
man git
例如,要想获得配置命令的手册,执行
git help config
2.Git基础
2.1获取Git仓库
进入要使用Git进行管理的目录,执行如下命令:
git init #初始化
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
2.2Git命令常规操作
add | 添加文件内容至索引 |
---|---|
bisect | 通过二分查找定位引入 bug 的变更 |
branch | 列出、创建或删除分支 |
checkout | 检出一个分支或路径到工作区 |
clone | 克隆一个版本库到一个新目录 |
commit | 记录变更到版本库 |
diff | 显示提交之间、提交和工作区之间等的差异 |
fetch | 从另外一个版本库下载对象和引用 |
grep | 输出和模式匹配的行 |
init | 创建一个空的 |
Git | 版本库或重新初始化一个已存在的版本库 |
log | 显示提交日志 |
merge | 合并两个或更多开发历史 |
---|---|
mv | 移动或重命名一个文件、目录或符号链接 |
pull | 获取并合并另外的版本库或一个本地分支 |
push | 更新远程引用和相关的对象 |
rebase | 本地提交转移至更新后的上游分支中 |
reset | 重置当前HEAD到指定状态 |
rm | 从工作区和索引中删除文件 |
show | 显示各种类型的对象 |
status | 显示工作区状态 |
tag | 创建、列出、删除或校验一个GPG签名的 tag 对象 |
常规操作示意图
文件的状态变化周期
2.3创建文件
touch 123.txt
添加文件跟踪
git add .
由工作区提交到本地仓库
git commit -m 'first commit'
查看git的状态
git status
提交后的git目录状态
tree .git/
简便方法
git commit -a -m "注释信息"git commit -a -m "注释信息"
-a 表示直接提交
2.4删除git内的文件
命令说明:
• 没有添加到暂存区的数据直接rm删除即可。
• 已经添加到暂存区数据:
git rm –cached database
→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)
git rm -f database
2.5重命名暂存区数据
• 没有添加到暂存区的数据直接mv/rename改名即可。
• 已经添加到暂存区数据:
git mv 123.txt
2.6查看历史记录
• git log #→查看提交历史记录
• git log –oneline 显示在一行
• git log -2 #→查看最近几条记录
• git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异
• git log –stat -2 #→–stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
• git log –pretty=oneline #→–pretty根据不同的格式展示提交的历史信息
• git log –pretty=fuller -2 #→以更详细的模式输出提交的历史记录
• git log –pretty=fomat:”%h %cn” #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。
使用format参数来指定具体的输出格式
格式 | 说明 |
---|---|
%s | 提交说明。 |
%cd | 提交日期。 |
%an | 作者的名字。 |
%cn | 提交者的姓名。 |
%ce | 提交者的电子邮件。 |
%H | 提交对象的完整SHA-1哈希字串。 |
%h | 提交对象的简短SHA-1哈希字串。 |
%T | 树对象的完整SHA-1哈希字串。 |
%t | 树对象的简短SHA-1哈希字串。 |
%P | 父对象的完整SHA-1哈希字串。 |
%p | 父对象的简短SHA-1哈希字串。 |
%ad | 作者的修订时间。 |
2.7还原历史数据
Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD,上上一个版本则会叫做HEAD^,当然一般会用HEAD~5来表示往上数第五个提交版本。
git reset –hard hash
git reset –hard HEAD^ #→还原历史提交版本上一次
git reset –hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统
会自动匹配)
命令
git log --oneline --decorate
git reset –hard 3de15d4
2.8还原未来数据
什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。
git reflog #→查看未来历史更新点
git reset --hard #版本号来回滚
git checkout -- 文件名 #将文件从本地仓库回滚到未修改的状态
如果我们将修改i的文件已经添加到了暂存区了,又怎么回滚呢?
git reset HEAD 文件名
如果想让他再回到未修改时的状态,那么就又用到了我们那个git checkout -- 文件名,那个指令了 。
2.10标签使用
前面回滚使用的是一串字符串,又长又难记。
git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
git tag #→查看当前所有的标签
git show v1.0 #→查看当前1.0版本的详细信息
git tag v1.2 -m “version 1.2 release is test” #→创建带有说明的标签,-a指定标签名字,-m指定说明文字
git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
git push origin --tags #基于版本提交
2.11对比数据
git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改
后,再把它提交到仓库就放⼼多了。
git diff README 本地目录 和缓存区
git diff –cached 缓存区 本地仓库的对比
3.分支结构
在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。
那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。
3.1分支切换
git branch 查看当前分支
git branch dev 创建一个名为dev的分支
git checkout dev 将工作切换到dev分支上
git checkout -b dev #创建并切换到dev分支上,和上面两个指令的效果一样
git branch master
git merge bug #分支合并---首先切换到master分支,然后在master分支上执行merge指令来合并
bug分支的代码
git branch -d bug 删除bug分支
手工解决冲突
打开编辑文件
3.2删除分支
因为之前已经合并了分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。
查看所有包含未合并工作的分支,可以运行 git branch –no-merged**:
git branch --no-merged dev
这里显示了其他分支。 因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败:
git branch -d dev
error: The branch 'testing' is not fully merged. If you are sure you want to delete it, run 'git branch -D testing'.
如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。
4.异地开发
上传代码
1. 给远程仓库起名
git remote add origin 远程仓库地址
2. 向远程推送代码
git push -u origin 分支
在新电脑上第一次获取代码
1. 克隆远程仓库代码
git clone 远程仓库地址(内部已实现git remote add origin 远程仓库地址)
2. 切换分支
git checkout 分支
在新电脑上进行开发
1. 切换到dev分支进行开发
git checkout dev
2. 把master分支合并到dev(仅一次)
git merge master
3. 修改代码
4. 提交代码
git add .
git commit -m 'xx'
git push origin dev
回老电脑上继续写代码
1. 切换到dev分支进行开发
git checkout dev
2. 拉代码
git pull origin dev
3. 继续开发
4. 提交代码
git add .
git commit -m 'xx'
git push origin dev
开发完毕之后,在dev分支上commit,然后切换到master分支上合并一下dev分支,然后推送到
GitHub上的master分支上,就算是完成了
5.常用操作
开发人员
-
平时自己开发功能,可以进行提交
git add . git commit -m '1/3' git push origin master
git add . git commit -m '2/3' git push origin master
git add . git commit -m '3/3' git push origin master
-
创建版本,准备上线
git tag -a v1.3 -m '撒旦法'
git push origin --tags
运维人员
从开发哪里获取:
仓库地址:https://gitee.com/wusd/ziwen.git
版本:v1.1
下载代码:
git clone -b v1.1 https://gitee.com/wusd/ziwen.git