Git实战

Posted 子不语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git实战相关的知识,希望对你有一定的参考价值。

1. Git简介

1.1 什么是Git

Git是一个分布式的版本控制软件。

  • 软件,类似于QQ、office等安装到电脑上才能使用的工具;
  • 版本控制,类似于毕业论文,需要反复修改和保留原历史数据;
  • 分布式
    • 文件夹拷贝
    • 本地版本控制
    • 集中式版本控制
    • 分布式版本控制

1.2 为什么要做版本控制

要保留之前的所有版本,一边回滚和修改。

1.3 安装Git

详见:https://git-scm.com/book/zh/v2/起步-安装-Git

2. Git基本命令

想要让Git对一个目录进行版本控制的步骤:

  • 进入要管理的文件夹

  • 执行初始化命令

    git init
    
  • 管理目录下文件的状态

    git status
    # 新增文件或修改过后的文件为红色
    
  • 管理文件(管理后的文件为绿色)

    git add 文件名
    # 或者
    git add .
    
  • 个人信息配置:用户名、邮箱

    git config --global user.email "个人邮箱"
    git config --global user.name "个人用户名"
    
  • 生成版本

    git commit -m "版本描述信息"
    
  • 查看版本记录

    git log
    
  • 回滚至之前版本

    git log  # 查看版本信息,取得版本号
    git reset --hard 版本号
    
  • 回滚至之后版本

    git reflog  # 查看版本信息,取得版本号。由于已经回滚至之前某一版本了,所以需要用到reflog
    git reset --hard 版本号
    

3. 引入分支

分支可以给使用者提供多个环境,意味着可以保留主线不动,在分支上修改、新增文件,以免影响主线。

  • 查看分支

    git branch
    
  • 创建分支

    git branch 分支名称
    
  • 切换分支

    git checkout 分支名称
    
  • 合并分支

    git merge 要合并的分支名称
    

    【注意】合并分支指的是:站在某一分支,将另一分支合并过来;另一分支不会发生改变;也有可能产生冲突。

  • 删除分支

    git branch -d 分支名称
    

一般的工作流程是:有一主分支master,存储稳定运行的版本。

当需要开发新功能时,新建立一个develop分支,或者feature分支,独立开发新的功能--->新功能开发完--->通过测试--->确定没问题--->合并到主分支(master)中。

当需要修复bug时,也是:新建立bug分支--->修复漏洞--->通过测试--->确定没问题--->再合并到主分支(master)中。

4. 上传云端

Git是分布式版本控制软件,除了可以在本地做版本控制,也可以有一个云端仓库,这样就可以摆脱地点限制了。

而云端仓库,可以选择官方建立的GIthub,也可以使用国内主流平台Gitee(码云)。


注册账号之后,创建仓库,拿到云端仓库地址

本地仓库与云端仓库建立关联:

git remote add origin 云端仓库地址

向云端仓库推送代码

git push -u origin 分支名称

在新设备第一次获取云端仓库

git clone 云端仓库地址(内部已实现git remote add origin 云端仓库地址)

往后获取云端代码(获取最新代码,不必再clone,使用pull)

git pull origin 分支名称

【注意】

git pull origin 分支名称
# 相当于
git fetch origin 分支名称
git merge origin/分支名称

5. rebase作用

rebase(变基),可以让提交记录变得简洁,合并分支不分叉。

5.1 减少版本记录

rebase的第一个使用场景,是减少版本记录。比如下面有4个版本记录,如果觉得版本记录太多了,不方便,就可以使用rebase命令,将某些版本记录整合成一个。

git rebase -i e9d937823afe2a50183137084cf43d180a5c34ec

e9d937823afe2a50183137084cf43d180a5c34ec是第2个版本的版本号。

上式的意思是,将当前所在的版本号(第4版本)与第2个版本号之间的记录进行整合。

也可以这样写:

git rebase -i HEAD~3

表示将最近的三条版本记录进行合并

这时会出现设置界面:

pick e9d9378 2
pick ec38e42 3
pick 73dfd33 4

# Rebase 9ad0c8e..73dfd33 onto 9ad0c8e (3 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup [-C | -c] = like "squash" but keep only the previous
# commit\'s log message, unless -C is used, in which case
# keep only this commit\'s message; -c is same as -C but
# opens the editor
# x, exec = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with \'git rebase --continue\')
# d, drop = remove commit
# l, label

将某一些版本前的【动作】设置为 s,表示将它们合并。

这时,最新的三个版本信息就合并成为一个了。

【注意】如果版本信息已经提交到云端仓库,就不要再合并版本了。不然本地和云端的记录不一样,会出现麻烦。

5.2 减少分叉

如果两个分支各自进行向前开发,最终合并的时候一定会有分叉记录。

可以使用下面的命令查看分叉记录:

git log --graph

更简洁地查看分叉:

git log --graph --pretty:"%h %s"

【h表示版本的哈希值;s表示版本的描述信息】


而rebase可以减少这个分支。

案例:先在dev分支中建立dev.txt;再在master中建立master.txt;

此时如果直接站在master分支上合并dev,则会产生类似上图的分支结构。

如果不想出现这种分支结构,可以这样做:

  1. 先在dev分支下执行下面的命令:
git rebase master
  1. 再切换到master分支中,合并dev分支
git checkout master
git merge dev

5.3 减少因云端而产生分叉

这种情景和第二种情景很类似。

某一版本产生两个分支,分别独立进行开发,继而合并到一起。此时会产生分叉。

5.2的情景是在本地中产生的,而加入云端仓库之后,在不同的折本进行开发,会更容易产生分叉。

以前使用的从云端仓库拉代码到本地的命令是:

git pull origin 分支名称

这个命令相当于以下两个命令的集合:

git fetch origin 分支名称
git merge origin 分支名称

本质上就是从云端仓库中复制一条分支下来,并将之合并到本地的分支中。

如果云端的分支被pull到不同的设备,不同的设备独立开发。

那么后面pull代码的一方,就会产生分叉。

如果不想产生分叉的话,可以使用下面两个命令:

git fetch origin 分支名称  # 先拉云端仓库的代码到本地
git rebase origin/分支名称

【此处存疑:最后是否需要在执行merge命令?】

6. Beyond Compare

Beyond Compare是一个数据对比软件,Git可以结合它来快速解决合并时的冲突问题。

步骤:

  1. 安装Beyond Compare

  2. 在Git中配置【--local 参数表示仅在当前项目生效】

    git config --local merge.tool bc3  # 关联一个合并工具,该工具取名“bc3”
    git config --local mergetool.path "/usr/local/bin/bcomp"  # 设置工具执行文件的路径
    git config --local mergetool.keepBackup false  # 设置不保留源文件的备份
    
  3. 当有冲突文件时,使用以下命令,调用该工具进行修改

    git mergetool
    

git第九节---git命令实战

1. git 项目创建

   mkdir git-command 

 2.git 配置

 git config --list 

配置用户名 邮箱

git config user.name ‘XXX‘  --local

git config user.password  ‘XXX‘  --local

git config --global alias.st status

 3.初始化成git 项目

 git init 

远程建立连接

git remote add 远程连接地址

git remote -v

4. 添加.gitignore文件 (忽略文件)

5.添加README.md (项目说明文件)

  正常开发联调项目使用

 (1)建立个人分支

  1文件新增,编辑,删除

  创建分支 dev : git branch dev

  2.状态查看 git status

 

  3.添加文件到暂存区 git add

 

 4.提交到暂存区 git commit 

 

 5.推送 git push

 6.上线打tag 

git tag -a v0.1.0 -m ‘XXX‘

gut  push --tag 

  hotfix修复问题

  切换新的分支 git checkout -b

     删除本地分支: git checkout -d XXXX(分支名称)

     删除远端分支: git push origin -d XXXX(分支名称)

  问题修复 

 

 代码提交

 

 代码合并

git  merge  dev 

 重新打tag

 存储未添加到暂存区的文件

 git stash (回复到最近一次提交的内容)

 多人协同开发

远端会出现多个不同的开发分支

拉取远程公共分支

合并到本地分支

解决冲突

提交

推送

 

以上是关于Git实战的主要内容,如果未能解决你的问题,请参考以下文章

Git实战之git客户端上传文件到github

在IDEA中实战Git

Git学习与码云实战

git实战

Git分支管理实战

Git实战指南----跟着haibiscuit学Git(第八篇)