美文网首页Gitgit及github学习
Git 版本管理详细使用

Git 版本管理详细使用

作者: Java酸不酸 | 来源:发表于2019-02-21 14:28 被阅读1次

序言:目前,Git是比较流行的版本管理系统。相比于SVN,我更偏爱Git! 本文将详细介绍使用Git的一些心得。

什么是Git?

Git是一种分布式版本控制系统(DVCS),也称为分散式。每个开发人员都拥有存储库的完整副本,该存储库位于云中(远程仓库)。

安装Git

本人使用的是Mac,终端自带Git工具

  • Mac:通过Homebrew安装
# 安装homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装Git
brew install git
  • Linux
sudo apt-get update
sudo apt-get install git

使用Git

创建本地存储库

git init
开发
  • 执行完git init后本地仓库已初始化完成。ls -a可以查看到.git的隐藏文件

更新仓库内容

创建文件并修改内容
# 创建一个README文件
touch READEM.md
# 写入一些内容到READEM.md
echo 'hello,world' >> READEM.md
# 打印READEM.md文件内容
cat READEM.md
创建文件
查看仓库状态
git status
# 或者 git status -s
查看仓库状态
将变更的文件纳入版本管理
git add .
# . 是将所有的文件递归纳入版本管理,若单个添加git add READEM.md 即可
纳入版本管理
将纳入版本管理的文件提交到本地仓库
git commit -m 'first commit'
提交
查看日志
git log  # 命令是查看全部提交日志  
git log -2  # 查看最近2次的提交日志  
git log -p  # 查看历史纪录以来哪几行被修改  
git log --stat --summary # 查看每个版本变动的档案和行数 
查看日志

日志的样式略微难看,这里给大家推荐一个配置

# 给git log起一个别名:git lg
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(red)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# 更改之后
git lg  # 命令是查看全部提交日志  
....
查看日志

分支

创建分支
git branch dev1

Git创建分支时,它只是创建一个带有该分支名称的指针,该指针指向已创建分支的commit

切换到dev1分支进行开发
git checkout dev1
创建分支和切换到dev1分支

接下来的所有操作都在dev1分支上,我们仍然来更新仓库的文件内容

touch dev1.txt
echo 'this is text file' >> dev1.txt
# 查看状态
git status -s
# 纳入版本控制
git add .
# 提交
git commit -m 'create a dev1 text file'
# 查看日志
git lg 
进行开发

合并分支

假设,这条分支的任务已完成,我们切换到主线master上去

git checkout master

此时,我们再查看日志,并没有刚刚提交的'create a dev1 text file'。原因是:之前所有的操作都在dev1分支上执行,现在切回到master分支自然没有刚刚的日志记录。在实际项目开发中写了不就没有意义了吗?** 所有我们要将dev1分支与master合并!**

git merge dev1
合并分支
合并问题

合并之后再次查看日志,你会发现并没有存在dev1分支的存在,与我们相像的并不一致,这是为何?
原因:这是因为Git使用快进模式(fast-forward)合并了分支。这里需要注意git给我们打印的输出信息,如上图所示:master和dev1是共同的祖先!
** 在我们合并分支时,不推荐使用fast-forward模式!可以通过--no-ff(无快进模式)命令来处理**

# 新建分支dev2重复dev1的操作,再次合并
git merge --no-ff dev2
合并分支
合并分支

通过这种方式来合并分支,可以完美的显示分支的生命迹象!

删除分支

假设分支合并完成,此分支已没有作用,我们应该移除此分支,以后可再次创建命名为dev1分支

git branch -d dev1

合并冲突

下面模拟一下合并冲突问题!

  • 在master分支上更新仓库并提交
# master分支更新仓库并提交
echo 'this is a test log' >> README.md
git status -s
git add .
git commit -m 'readme file change content'

# master分支更新仓库并提交
echo 'this is two' >> README.md
git status -s
git add .
git commit -m 'readme file change content two'

# 切换到dev2分支,更新仓库并提交
git checkout dev2
echo 'this is dev2 change' >> README.md
git status -s
git add .
git commit -m 'readme file change content dev2 change'

# 再次切换到master分支,更新仓库并提交
git checkout master
echo 'this is three' >> README.md
git status -s
git add .
git commit -m 'readme file change content three'

# 做完上述工作,接下来合并
合并
git merge dev2
合并分支

很显然,合并失败!此时,两个分支的版本存在冲突,Git已经不知道怎么做了。** 在master更新仓库并提交之后版本已经改变,master已不是上次上传的版本,而dev2分支还是从上一次合并的HEAD开始;所以这时是无法合并的。而Git所做的事情是:指出存在这些内容不兼容的部分。**

  • 接着,我们看一下仓库状态:git status
状态
  • 进入README文件(vi README.md)查看更新的内容,会发现多出了<<<<<<<HEAD、========、>>>>>>>>dev2,这里有两个部分:

    • 第一部分:在<<<<<<< HEAD和=======之间,是master分支更新的内容;
    • 第二部分:在=======和>>>>>>> dev2之间,是dev2分支更新的内容;


      readme文件
  • 解决办法

    • 使用HEAD-master版本
    • 使用dev2版本
    • 两个版本的组合
  1. 使用HEAD-master版本
# 将master分支提交的信息保留,去掉dev2分支的内容,并且去掉<<<<<<<HEAD、========、>>>>>>>>dev2
# 保存如下:
this is a test log
this is two
this is three

# esc退出编辑模式,快捷键shift + :  再输入wq,回车即可,保存并退出
# 查看状态
git status -s

** 在一开始合并时,查看仓库状态README文件还是Unmerge 状态,在git status -s下是红色的:UU README.md;而现在是AA README.md **


readme文件
git add .
git commit -m 'save HEAD version, remove dev2 version'
# 这里虽然使用了HEAD版本,但是保存了dev2分支的生命迹象
# 合并完成,删除dev2分支
git branch -d dev2
  1. 使用dev2版本
# 与第一种解决办法同理
  1. 两个版本的组合
# 两个版本组合就是两者都保留,所以只需要去掉<<<<<<<HEAD、========、>>>>>>>>dev2即可
# esc退出编辑模式,快捷键shift + :  再输入wq,回车即可,保存并退出
git add .
git commit

版本合并完之后如下:

readme文件

版本回退(删除)

  • 命令
git reset --hard <版本号>  # 回退到对应的版本号,这里的版本号就是日志前面的7个字符
git reset --hard -HEAD^   # 删除最后一次提交的版本,也就是回退到最后倒数第二次版本
git reset --hard -HEAD~   # 删除最后一次提交的版本,也就是回退到最后倒数第二次版本
git reset --hard -HEAD^^  # 删除最后两次次提交的版本,也就是回退到最后倒数第三次版本
.... 其他的依次类推

clone命令

在码云或者Github上要克隆别人的代码,需要用到clone命令

git clone <仓库地址:url/ssh>  # 如下图所示

[图片上传失败...(image-b0ef86-1550730346214)]

相关文章

  • Git 版本管理详细使用

    序言:目前,Git是比较流行的版本管理系统。相比于SVN,我更偏爱Git! 本文将详细介绍使用Git的一些心得。 ...

  • AD 使用 Git 的注意事项

    使用 Git 管理项目 Altium Designer 支持使用 Git/SVN 用以版本控制。如果使用 Git,...

  • 开发中用到的工具

    版本控制 使用Git进行版本控制。 这里有关于Git的简单介绍。这里有Git比较详细的使用介绍 代码托管位置 对于...

  • 2018 11 9

    学习使用git管理代码版本

  • 项目版本管理Git使用详细教程

    前言 记得刚开始做项目开发的时候都是一个人完成一个项目,单打独斗的开发,也不知道什么是团队开发,没有这个概念,随着...

  • git的常见用法

    Git的使用:git是一种版本控制系统,可以很方便用来管理我们的代码,详细的可以看廖雪峰的git教程,我们工作常用...

  • 9- 快速上手Linux玩转典型应用- git版本管理

    10- git版本管理 推荐使用git进行代码的版本管理。文档管理。 网盘保存等。没有版本管理。每次提交可以进行回...

  • GIT的一篇终极教程

    我们在这一篇文章里详细讲述GIT以及使用方法。 1.什么是GIT GIT就是一个版本管理系统,为了应对几个需要而诞...

  • 从0到1成为Flink源码Contributor之环境搭建(1)

    前置要求 Java技术体系 Git版本管理使用 Maven依赖管理使用(官方建议使用版本3.2.5) Idea软件...

  • git 常用指令

    如何使用git管理代码 git 常用命令速查 创建版本库 git clone (url) #克隆远程版本库 git...

网友评论

    本文标题:Git 版本管理详细使用

    本文链接:https://www.haomeiwen.com/subject/psvryqtx.html