git的使用总结,非常详细

一. 版本控制器的分类:

  • SVN

    集中式版本控制器(必须有中央服务器),一旦服务器毁灭, 代码就消失·

  • GIT

    分布式版本控制器 ,即便没有中央服务器一样可以本地版本控制

二. GIT

  • 安装:https://gitforwindows.org/

    • 下载Git源代码压缩文件

      wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.23.0.tar.xz
      
    • 解压缩和解归档

      xz -d git-2.23.0.tar.xz
      tar -xvf git-2.23.0.tar
      
    • 安装底层依赖库

      yum -y install libcurl-devel
      yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
      
    • 安装配置

      cd git-2.23.0
      ./configure --prefix=/usr/local    
      #可以指定安装目录,统一管理
      
    • 构建和安装

      make && make install
      
    • 安装完成检查自己的git版本

      git --version
      git config --global user.email "[email protected]"
      git config --global user.name "于学敏"
      

三. GIT使用

  • git 从clone 开始使用

    • 构建ssh免密连接,将公钥放到代码托管平台

      ssh-keygen -t rsa -b 2046 -c "[email protected]"
      
    • 克隆代码

      git clone --depth=1 仓库地址 [想改的文件夹名称]
      #只保留最新代码,最后一次的提交记录。
      
      #git 指定分支拉取
      
    • 创建分支

      git branch 分支名 要基于的分支名
      #远程分支加 origin
      
  • git从本地初始化 使用

    • 进入文件夹,本地仓库初始化

      git init
      
    • 在本地进行版本控制

      git add .    
      git commit -m "提交信息"
      
    • 在码云/github/gitlab创建仓库

      初始化仓库的那些选项不要选,
      
    • 关联远程仓库

      git remote add origin    https://gitee.com/come_along/code.git 
      #origin是远程仓库的别名,以后使用origin就可以了。一般大家都默认使用origin作为别名
      git remote remove origin
      # 取消远程关联
      
    • 推送

      git  push -u master:master
      #其中,`-u`是`--set-upstream`的缩写,用来指定推送的服务器仓库,后面的`origin`就是刚才给仓库起的简短的别名,冒号前面的`master`是本地分支名,冒号后面的`master`是远程分支名,如果本地分支`master`已经和远程分支`master`建立过关联,则冒号以及后面的部分可以省略。
      									
      

四. Git的标准流程

分支管理策略

git-flow
  • 两个长线分支: master 、develop

  • 三个短线分支 : feature 、release 、hotfix

    feature(开发特定功能的分支,开发结束后合并到develop)
    
    release(从develop分离出来的为发布做准备的分支,发布结束后合并到master和develop)
    
    hotfix(产品发布后出现问题时紧急建立的分支,直接从master分离,问题修复后合并到master并打上标签,同时还要合并到develop来避免将来的版本遗漏了这个修复工作,如果此时有正在发布中的release分支,还要合并到release分支)
    
  • 开发新功能
    • 从develop分支创建feature分支

      git switch -c  feature/user develop
      或者
      git checkout -b feature/user develop
      
    • feature分支上进行开发并实施版本控制

      git add . 
      git commit -m "xx"
      
    • 工作完成,将feature分支合并到develop分支

      git checkout develop
      git merge --no-ff feature/user
      git branch -d feature/user
      git push origin develop
      
  • 发布

    • 从develop分支创建release分支

      git checkout -b release-0.1 develop
      git push -u origin release-0.1
      ...
      git pull
      git commit -a -m "xxx"
      
    • 将release分支合并回master和develop分支

      git checkout master
      git merge --no-ff release-0.1
      git push
      
      git checkout develop
      git merge --no-ff release-0.1
      git push
      
      git branch -d release-0.1
      git push --delete release-0.1
      git tag v0.1 master
      git push --tags
      
      
  • 修复线上bug

    • 创建hotfix分支

      git checkout -b hotfix-0.1.1 master
      git push -u origin hotfix-0.1.1
      ... ... ...
      git pull
      git commit -a -m "............"
      
    • hotfix分支合并回developmaster分支。

      git checkout master
      git merge --no-ff hotfix-0.1.1
      git push
      
      git checkout develop
      git merge --no-ff hotfix-0.1.1
      git push
      
      git branch -d hotfix-0.1.1
      git push --delete hotfix-0.1.1
      git tag v0.1.1 master
      git push --tags
      
  • Git-flow流程比较容易控制各个分支的状况,但是在运用上github-flow要复杂得多,因此实际使用的时候通常会安装名为gitflow的命令行工具(Windows环境的Git自带了该工具)或者使用图形化的Git工具(如SourceTree)来简化操作

github-flow(PR流程)
  • 克隆服务器上的代码到本地

    git clone [email protected]:jackfrued/python.git
    
  • 创建并切换到自己的分支

    git switch -c 分支名
    或者
    git branch -b 分支名
    
  • 在自己的分支上开发并作本地版本控制

    git add . 
    git commit -m "xxx"
    
  • 将自己的分支推到服务器

    git push origin 分支名
    
  • 在线发起一次合并请求(Pull Request 或者 Merge Request),请求将自己的工作成果合并到master分支,合并之后可以删除该分支。

    这种分支管理策略就是被称为github-flow或PR的流程,它非常简单容易理解,只需要注意以下几点:
    1. master的内容都是可以进行发布的内容(不能直接在master上进行修改)。
    2. 开发时应该以master为基础建立新分支(日常开发任务在自己的分支上进行)。
    3. 分支先在本地实施版本控制,然后以同名分支定期向服务器进行push操作。
    4. 开发任务完成后向master发送合并请求。
    5. 合并请求通过审查之后合并到master,并从master向正式环境发布。
    当然,github-flow的缺点也很明显,master分支默认就是当前的线上代码,但是有的时候工作成果合并到master分支,并不代表它就能立刻发布,这样就会导致线上版本落后于master分支。
    
  • 如果Pull Request(Merge Request)被接受那么工作成果就会出现在master分支上
    如果合并代码时出现冲突无法自动合并,应该先通过git pull将冲突代码拉到本地,使用
    git diff查看哪些地方发生了冲突,而是要当面沟通手动解决冲突以后重新提交代码,将自己的分支push到服务器,再次发起合并请求。

五. 其他操作

分支操作
  • 创建和切换分支

    git branch 分支名 [要基于的分支名]
    git switch 分支名
    

    git switch  -c  分支名
    git checkout -b 分支名
    
  • 关联远程分支

    • 如果当前分支还没有关联到远程分支

      git branch -u origin/develop
      
    • 如果需要为指定的分支关联远程分支

      git branch -u origin/develop 分支名
      
    • 或者创建分支时,使用–track参数,关联远程分支

      git branch --track 分支名 origin/develop
      
    • 解除本地分支与远程分支的关联

      git branch --unset-upstream 分支名
      
  • 分支合并

    git switch develop   #切换到要合并到的分支
    git merge --no-ff feature/user 
    

    –no-ff是指不使用Fast Forward合并。使用快速合并,分支上的历史版本就全部丢掉了。

  • 合并冲突

    在合并分支时,没有冲突的部分Git会自动合并。如果发生了冲突,会有CONFLICT (content): Merge conflict in . Automatic merge failed; fix conflicts and then commit the result(自动合并失败,修复冲突之后再次提交)的提示,git pull拉取代码, git diff来查看冲突部分,解决冲突后,重新提交

  • 分支变基

    分支合并操作可以将多个分支上的工作成果最终合并到一个分支上,在多次合并操作之后,分支可能会变得非常的混乱和复杂。为了解决这个问题,可以使用git rebase操作来实现分支变基。

    变基后和合并就是扁平的,直直一条线了。

    git rebase develop
    git switch develop
    git merge feature/user
    注意:绝对不能在公共分支(如develop)上做变基操作!!!
    
  • 删除分支

    git branch -d 分支名
    git push origin --delete 远程分支名  #删除远程分支名 
    
临时保存
  • git stash      #临时保存
    git stash pop  #恢复刚才的工作
    #将当前工作区和暂存区发生的变动放到一个临时的区域(堆栈),让工作区变干净。这个命令适用于手头工作还没有提交,但是突然有一个更为紧急的任务(如线上bug需要修正)需要去处理的场景。
    #临时保存手头工作,让工作区跟暂存区和仓库是同步状态
    
版本回退
  • git reset

    • –soft 只把本地仓库回退,暂存区和工作区都不改变(撤回commit操作)

    • –mixed 默认的,只回退暂存区和本地仓库,工作区不改变

    • –hard 本地仓库、暂存区、工作区都回退

    git reset --hard 哈希码
    git reset --hard HEAD^
    git reset --hard HEAD~1
    
    #拉取和强制覆盖
    git fetch  --all
    git reset  --hard origin/master
    git pull
    

    git log

    git log    提交记录,回退后git log查不到后面的提交记录
    git reflog 可以查看到所有的提交记录,版本
    
    • git remote -v #查看是否有远端仓库对应

    • git fetch + git merge

      等同于git pull 拉下来自动合并
      
日志查看
  • git log

    git log --graph --oneline --abbrev-commit
    
  • git reflog

    查看所有的日志

其他用法
  • 查看区别

    git diff 
    #常用于比较工作区和仓库、暂存区与仓库、两个分支间有什么差别
    
  • 打标签

    git tag v0.1 master
    git push --tags
    
  • 用暂存区文件恢复工作区文件

    git restore 文件名
    
  • 将add添加到暂存区的文件取消 追踪

    git rm --cached  
    
  • 在线生成版本忽略文件

    在线生成版本控制忽略文件:http://gitignore.io/
    
  • 挑选某个分支的单次提交并作为一个新的提交引入到你当前分支上。

    git cherry-pick
    
  • 撤回提交信息

    git revert
    
  • 下载远程仓库的所有变动,然后再根据需要进行合并操作

    git fetch origin master:temp
    git merge temp
    #这两个合起来相当于git pull(拉取下来自动合并)
    

你可能感兴趣的:(git的使用总结,非常详细)