Git---安装、配置、使用、分支管理及实例

git安装
# yum install git -y
 
安装完Git就可以对其做一些配置
Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:
/etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。
~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。
位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。
 
设置用户和邮箱
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。
这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
# git config --global user.name "tom"
# git config --global user.email "tom@163.com"
 
获取帮助
若你使用 Git 时需要获取帮助:
# git --help #获取git命令信息
# git config --help #获取具体命令帮助信息
 
Git的简单使用
创建工作区
# mkdir /git
创建版本库
# cd /git/
# git init   #初始化
Initialized empty Git repository in /git/.git/
版本提交:
# cp /etc/passwd . #注意文件必须要在工作区中
# git status #查看有无变化
# On branch master
#
# Initial commit
#
# Untracked files: #没跟踪的文件
# (use "git add <file>..." to include in what will be committed)
#
# passwd
nothing added to commit but untracked files present (use "git add" to track)
# git add passwd #将文件添加到暂存区
# git reset HEAD passwd #将已添加到暂存区的文件从暂存区撤除
# git commit -m "add passwd" #将文件提交到版本库 -m后为描述信息
 
[master (root-commit) c30efe0] add passwd
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 passwd
# git status
# On branch master
nothing to commit (working directory clean)
# echo bbbbbbb >> passwd
# git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: passwd
#
no changes added to commit (use "git add" and/or "git commit -a")
# git checkout -- passwd #撤销工作区所做的修改
 
版本比较
版本比较两种情况:
1. 未添加到暂存区:
# git diff passwd #将工作区和最近一次版本进行比较
2. 已添加到暂存区:
# git diff --cached passwd #将暂存区和最近一次版本进行比较
 
# git add passwd #跟前面一样两步提交
# git commit -m "append bbb..."
[master 5630321] append bbb...
1 files changed, 1 insertions(+), 0 deletions(-)
查看已提交的版本:
# git log
commit 5630321b52cd9218359685ea9092ab495de545ee
Author: root <root@localhost>
Date: Fri Feb 17 01:04:12 2017 +0800
 
append bbb...
 
commit c30efe02cc6db7f35446c1b3036531a6e039b59b
Author: root <root@clone12.uplooking.com>
Date: Fri Feb 17 00:50:42 2017 +0800
 
add passwd
# git log --pretty=oneline #简洁显示(只显示版本号和描述信息)
5630321b52cd9218359685ea9092ab495de545ee append bbb...
c30efe02cc6db7f35446c1b3036531a6e039b59b add passwd
撤销修改:
#git checkout -- filename
撤销修改分两种情况:
1. 如果在工作区进行了修改,但未添加到暂存区,撤销后将回到修改前的状态
2. 如果进行修改后已添加到暂存区又进行了修改,撤销后将回到暂存区的状态
 
版本回退:
# git reset --hard HEAD^ #回退到上一个版本 ,如果是上两个版本就接两个^^, ...
HEAD is now at c30efe0 add passwd
 
# cat passwd #下面添加的内容没有了
如果版本太多可用:
# git log --pretty=oneline
c5076eb443e128fff13e076575433b8c8868055f change bin upper
6fffe8ab3a5bde75cb25493a73588e92eda4c19c delete root
c30efe02cc6db7f35446c1b3036531a6e039b59b add passwd
# git reset --hard HEAD~2 #HEAD~2=HEAD^^
HEAD is now at c30efe0 add passwd
如果发现回退错了,比如现在是想回退到B版本:
# git reflog
c30efe0 HEAD@{0}: HEAD~2: updating HEAD
c5076eb HEAD@{1}: commit: change bin upper
6fffe8a HEAD@{2}: commit: delete root
c30efe0 HEAD@{3}: HEAD^: updating HEAD
5630321 HEAD@{4}: commit: append bbb...
# git reset --hard 6fffe8a #用版本号回退
HEAD is now at 6fffe8a delete root
 
删除文件:
# rm -rf passwd
# git status
# On branch master
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: passwd
#
no changes added to commit (use "git add" and/or "git commit -a")
# git commit -m "delete passwd"
 
标签管理
git tag #查看所有的标签
git tag v1.0 #给最近的版本打标
git tag -a v0.9 -m "merged bug fix" 5076eb #给之前的某个版本打标
git checkout v0.9 #回退到打标的某个版本
git show v0.9 #查看标签信息
 
git log 常用参数
git log --author=name 查看某一个人的提交记录
 
git log --pretty=oneline 简洁输出,使每一条提交记录只占一行
 
git log --graph --oneline --decorate --all 通过ASSCII艺术的树形结构展示所有分支
 
git log --name-status 查看改变了的文件
 
分支管理
 
什么时候需要建分支?
a、为自己创建私人分支,避免和其他人产生干扰
b、做一个具有风险性的试验性更新
c、整合与其他人的工作,创建一个临时分支
d、将一部分代码分离出来,使其独立工作
 
创建分支 branch
# git branch test #test为分支的名字,自定义
# tree .git/refs/
.git/refs/
├── heads
│   ├── master
│   └── test
└── tags
 

 
# git checkout -b test #创建并切换到test分支
 

 
切换分支 checkout
# git checkout test
Switched to branch 'test'
查看当前操作的分支
# git branch
master
* test
删除分支
# git checkout master #先切回其他分支
Switched to branch 'master'
# git branch -d test #再删除想要删除的分支
Deleted branch test (was aef4cba).
查看和比较分支
# git branch develop
# echo hi >> file2
# git checkout develop
Switched to branch 'develop'
# git add file2
# git commit -m "add file2"
 
分支的比较
# git diff master ^develop
 
合并分支
# git checkout master
Switched to branch 'master'
# git merge develop #合并develop分支到当前分支
 
解决冲突:
如果两个分支对相同文件的相同内容做了不同的修改,那么在合并时冲突在所难免,出现冲突后就需要手工解决冲突再提交
 
合并管理:
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
我们在进行分支合并时,可加上--no-ff选项强制禁用Fast forward模式.
git log --graph --pretty=oneline
 
 

 
多分支实例
 
下图为某公司版本管理实例:
master:
主分支,不做具体的软件的修订的更新,而是将其他分支测试完成的软件记录为一个主分支上的软件版本。
类似于一个产品发布平台,当其他测试分支的软件稳定后即发布到master分支上。
该分支,由管理员负责维护,其它人只有拉取权限。来自于release分支的合并,供发版使用 
生命周期:伴随着整个项目的生命周期,项目结束时结束。
 
develop:
开发的主要分支,无论是要做新feature((新特性开发))还是做bug fix(bug修订),都是从这个分支分出来做的
在这个分支下主要负责记录开发状态下相对稳定的版本,即完成某个feature或者修复了某个bug后的开发稳定版本。
由开发人员在各自的feature分支开发完成后,合并至该分支。
分支命名:dev-版本号  
生命周期:一个阶段功能开发开始到本阶段结束
 
feature branches:
由多个分别负责不同的feature开发的分支组成的一个分支系列,new feature主要就再这个分支系列下进行开发。
把每个项目分成很多个功能点,将各个功能点分派给不同的人员去开发,每个人开发的功能点就会形成一个feature分支
当功能点开发测试完成后,就合并到develop分支中去。
 
release branches:
这也是有多个分支组成的一个分支系列,这个分支系统从develop分支分出来的,也就是预发布分支
在此分支下通常进行环境测试,如果在测试过程中出现缺陷,那么就在release分支下进行修复
修复完成测试通过后就分别合并到master分支和develop分支,随后master分支做正常发布。
 
hotfix branches:
紧急线上修复,当线上产品出现bug并且特别紧急的时候,就可以从master拉出分支到这里进行修复,修复完成后分别并入到master和develop分支。
 
 
 
 
 
 
 
posted @ 2020-10-20 21:00  梦里花落知多少sl  阅读(279)  评论(0)    收藏  举报