git

一、什么是git?

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git是分布式版本控制软件

git维基百科上详细介绍了git的资料,包括git的创建、使用以及一些参考资料,已经挺全了,记住一点,最高效的学习方式就是读文档,找官方文档去阅读学习是最快的掌握git的方法。

既然是分布式版本管理,那么和我们平常使用的svn有什么区别?

  1. 分布式 vs 集中管理 (多份版本库 vs 一份版本库,设想下版本服务器挂了?)

  2. 无需网络,随时随地进行版本控制,在没有网络的情况下你想回退到某个版本svn基本没戏;

  3. 分支的新建、合并非常方便、快速,没有任何成本,基本不耗时,svn的版本基本上等同于又复制了一份代码;

stackoverflow 上关于svn和git的区别的讨论,说的很详细,请参考 Why is Git better than Subversion? github 上通过版本库结构、历史、子项目(submudle)的不同来对比两者,请参考 What are the differences between SVN and Git?

集中式版本管理:

 分布式版本管理:

为什么要用分布式版本管理?

  1. 防止线上代码出问题,进行回滚

二、git 安装

Linux:略

Mac:略

Windows:略

检测有没有安装成功?

windows上右键看到Git GUI Here和Git Bash Here。然后点Git Bash Here进入输入git --version就可以看到了。

Mac上:

三、Git实战使用

准备Git环境

准备Git项目

项目:学员管理系统。

第一阶段:一个人单枪匹马开始干

  Git管理步骤:

  版本控制------>git管理文件夹

    1.   进入要管理的文件夹
    2.   初始化(标记,提名)
    3.   管理
    4.   生成版本

  初始化(标记,提名)命令:

  git 初始化 git init

  .git隐藏文件就是存储的所有的Git在管理这个文件夹中所有的配置以及版本信息。

  管理指定的文件:没被git管理是红色被git管理是绿色

  git status    检测当前文件夹(目录)下面的文件状态

    •   红色:未被管理的文件
    •   绿色:git已经管理起来了
    •   生成版本

  git add 要管理的文件文件名   

  git add .    表示将当前文件夹(目录)下的所有文件都进行管理

  生成版本:

  git commit -m '描述信息'

  比如面如信息为第一个版本或者v1。

  注意:

如果项目文件进行了修改,我们git需要检测什么文件进行了修改,然后对修改的文件进行管理在进行提交生成版本即可!

  查看版本记录:git log

git的三大区域:工作区、暂存区、版本库。

↓init

工作区:正在操作的文件夹,包含已经管理的文件和新的或者修改了的文件。自定检测。

↓add

暂存区:

↓commit

仓库:

第二阶段:在原来项目基础上拓展新功能。

第三阶段:‘突发事件’

回滚:回滚到之前版本

git reset --hard 版本号

从第五次提交回滚到之前可以回滚到四三二一。那么如果再第三次怎么回滚到第五次呢?

git reflog   
git reset --hard 版本号

第四阶段:紧急修复旧版本中的bug

分支基础知识:

  • 主干线(分支):master
  • 分叉分支:
  • 合并分支:

查看目前所处的分支:

git branch

创建分支:

git branch 分支名

从主分支切换到分支:

git checkout 分支名

对分支进行管理和提交。

  需要紧急修复旧版本bug,回到master主分支,创建修复bug的分支,一系列的代码操作最后管理和提交。

    合并分支需要回到master分支。

git checkout master
git branch
git merge 要合并的分支名

把修复bug的分支删掉:

git branch -d 分支名

如何解决分之合并产生的冲突?

  1、找到冲突的文件手动修改

  2、

git工作流: 

Git的协作功能

第五阶段:在家里写的代码到公司用。配合代码托管仓库(giuhup,gitlap,gitee...)

在家里第一次上传代码步骤:

 给远程仓库起别名:

git remote add origin https://github.com/zhangrenguo94/-.git
git remote add 别名 远程仓库地址(url)

向远程仓库推送代码:

git push -u origin master
git push -u origin 分支名称

在公司第一次拉代码:

git clone 远程代码仓库地址

注意:

  • 把所有的代码都已经拿下来了,切换分支可以直接切换。
  • 克隆内部已实现起别名,以后提交直接用origin就可以了

在公司里写代码继续开发新功能,应该在dev分支上写。

第一步:第一步切换到dev分支进行开发

第二步:将master代码合并到dev分支(只需要一次)

第三步:修改代码

第四步:将本地代码推送到托管仓库

git push origin dev

回到家里想继续开发,需要更新:

第一步:切换到dev分支进行开发

第二步:拉代码:

git pull origin dev

第三步:修改代码

第四步:提交代码

注意:

  开发完毕要上线,就需要将dev分支合并到master,master分支就可以上线。

切换到master
git chekcout master
dev分支合并到master
git merge dev
推送到远程仓库的master分支
git push origin master
回到dev分支
git checkout dev
将master分支代码合并到dev
git merge master
将dev分支提交到远程dev分支
git push origin dev

第六阶段:在公司写的代码忘记上传,然后回家写了新的功能代码上传。 

打开有冲突的文件,自己手动解决。

从线上拉代码,拉dev分支

git pull origin dev
等同于两句:
git fetch origin dev
git merge origin/dev
rebase(变基)使git记录变得简洁。

第一种情况:把多个提交记录整合成一个记录。(如果已经提交到远程代码库了不建议这么合并)
git rebase -i 版本号  意味着现在所在的地和这个版本号之间的记录做个合并。

git rebase -i HEAD~数字  比如数字是3,意味着从当前位置开始往前找3条记录然后进行合并。
注意:用git rebase -i HEAD~数字,需要进行操作,变成s。

第二种情况:有分支,dev分支和master分支合并,如果不想要分叉
先切回到dev分支
git checkout dev
然后rebase命令,把dev变成一个基本的干线,把master放进来
git rebase master
在接下来切换到master分支,再把dev分支merge回来
git checkout master
git merge dev

第三种情况:忘记将本地代码上传到云端。不产生分叉的方法。
git fetch origin dev
git rebase origin/dev


注意事项:
git rebase如果产生冲突解决冲突(按照提示)
执行git rebase --continue
rebase变基
beyond compare

git和 beyond compare建立联系。
git合并时直接直接调用某个命令启动beyond compare。

第一步安装beyond compare

第二步在git中进行配置
合并工具:bc4是我们给beyond compare起的名字。
git config --local merge.tool bc4
工具的安装路径:
git config --local mergetool.path ‘/usr/local/bin/bcomp’
不用保留备份
git config --local mergetool.keepBackup false

第三步应用beyond compare
git mergetool
beyond compare软件

多人协同开发 !!!

Gitflow工作流:

公司项目用组织 :

公司版本管理用tag:

第一步:创建项目并且打上标签

创建dev分支并且上传到云端

第二步:在组织邀请成员进组织,

第三步:

git有三个配置文件:

  当前项目目录下文件--->本地项目配置文件:项目/.git/config

git config --local user.name 'zrg'

git config --local user.email 'zrg@163.com'

  当前用户所在的目录---->全局配置文件:~/.gitconfig

git config --global user.name 'zrg'

git config --global user.email 'zrg@163.com'

  系统配置文件:/etc/.gitconfig

  注意:需要有root权限。

git config --system user.name 'zrg'

git config --system user.email 'zrg@163.com'

  配置文件应用场景:略

git免密登录:

  1. URL中体现
  2. SSH实现
    1、在自己电脑生成公钥和私钥(默认放在 ~/.ssh/
       id_rsa.pub
    id_rsa)
    2、拷贝公钥的内容,并设置到github中
    3、在git本地配置ssh地址
    4、以后使用就再也不用输密码了。
    git push origin master
  3. git自动管理凭证

gitignore忽略文件

应用场景:

  1. 只管代码,不管数据库

github任务管理相关 

  • issues
    文档以及任务管理
  • wiki
    项目文档

作者:张仁国

原文地址:https://www.cnblogs.com/zhangrenguo/p/10775865.html