zoukankan      html  css  js  c++  java
  • 学习笔记-Git

    一. 起因与目标

    1.起因:帮同事处理git push报错问题(missing Change-Id),网上教程都不能解决问题,且问题说明解释都含糊不清。

    2.目标:弄明白git命令串参数含义,尝试理清git工作原理,最后分析并解决同事的问题

    3. 篇外话:Windows记事本编辑保存UTF-8编码的文件,会在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题


    二. Git工作流程

    Git是分布式版本控制系统

    一般情况下,使用Git进行版本控制,需要用到 “本地版本库” 和 “远程版本库”

    1.本地版本库

    • 本地仓库由工作区暂存区(Index)HEAD指针组成。工作区你的工作目录,它持有实际文件;暂存区像个缓存区域,临时保存你的改动;HEAD指向你最后一次提交的版本。
    • 工作目录下有一个.git的隐藏文件夹,它不属于工作区,而是Git版本库
    • Git的版本库:存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

    •  把修改的文件添加到版本库分为两步,① git add 添加到暂存区;② git commit 暂存区内容提交到当前分支

     2.远程版本库

    与本地版本库关联,对版本进行备份并起到多用户协作的作用,有两种方法对远程版本库与本地版本库进行连接

    • 先建立本地库,后建立远程库,使用 git add origin命令建立连接
    • 先建立远程库,将远程库克隆到本地

    3.分支 

    • 初始化版本库时会默认建立master分支,在master上的每次提交(commit)串成一条"时间线"(版本可回退),master指向"时间线"上最新的一次提交

     

    • HEAD指针间接指向最新一次提交:HEAD是指向mastermaster才是指向提交的,所以HEAD指向的就是当前分支

    •  我们新建分支时,比如新建分支Dev,Dev(指针)会指向当前master分支的最近一次提交,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化

    •  切换到dev分支后,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

    • dev分支上的工作完成,就可以把dev合并到master上,方法是直接把master指向dev的当前提交。同样,Git合并分支很快,就改改指针,工作区内容不变

    • 分支合并,冲突解决:git merge <branch>,提示冲突后,打开目标文件,修改冲突并保存,重新add、commit后再merge

    • 分支的使用:master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活.干活都在dev分支上,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本.小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并


    三. 命令与解释  

     

    1.git init / git clone <远端仓库URLs>

    git init:创建一个空的Git存储库 - 本质上是一个 .git 目录,其中包含 objectsrefs/headsrefs/tags和模板文件的子目录。还将创建一个引用master分支 HEAD 的初始 HEAD 文件。

    注释:

      本地Git库需要和远端中心仓库建立连接:git remote add origin <远端仓库地址>

      git remote -v 查看origin指向的远端仓库

    git clone:克隆Git库到新的文件夹中,包括Git库的所有分支,origin默认指向远端仓库

    注释:

      git branch --remotes 查看远端仓库分支

      git pull 克隆远端库后,git pull 默认拉取远端仓库 master 分支

    2. git add <filename>

    将修改的文件添加到index(暂存区)

    注释:

      git rm --cached <filename> 将目标文件从暂存区移除

    3. git commit 

    将改动提交到HEAD

    4. git status

    显示 index(暂存区)文件与HEAD提交有差异的路径,工作树和index文件有差异的路径,以及工作树中不被Git追踪的路径.前者是你通过运行 "git commit "会提交的东西;第二和第三者是你在运行 "git commit "之前通过运行 "git add "可以提交的东西

    5. git diff

    git diff:是查看工作区与暂存区的差别

    git diff --cached:是查看暂存区与HEAD的差别

    git diff HEAD:是查看工作区和HEAD的差别的

    6.git push

    提交本地git库代码到远端仓库

      git push <远程主机名> <本地分支名>  <远程分支名>

      git push origin HEAD:refs/for/master%r=xxx.yyyzzz@zte.com.cn

      即将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,refs/for是我们提交代码到服务器之后是需要经过code review 之后才能进行merge

       

    注释:

      解释git push origin master 和git push origin HEAD

      在master分支上,HEAD指向master,而master指向的是最近的一次提交

    分支:

    7.git checkout -b <feature_x> / git switch -c <feacture_x>

      创建一个叫做"feature_x"的分支,并切换过去

    8.git checkout master

      切换回主分支

    9.git branch

      查看本地分支

    10.git log --graph

      命令可以看到分支合并图

    11.git merge <feacture_x>

      先切回主分支,执行上述命令,主分支会合并feature_x分支,即master 指向 feature_x指向的最新提交

    12.git branch -d feature_x

      新建分支删除

    13.git push origin <branch>

      推送分支,除非你将分支推送到远端仓库,不然该分支就是不为他人所见的

      


    四. 问题解决

    1.本地代码与远程库代码冲突问题:本地库文件发生修改后,远程库该文件被同事更新了,本地无法拉取代码的问题

    方案1. 希望保留本地修改:

      git stash

      git pull

      git stash pop

     方案2. 希望远程库覆盖本地修改:

      git reset --hard

      git pull

    2. push代码时发现缺少changeid-id

      git commit --amend

      


    参考资料:

      https://git-scm.com/docs

      https://www.runoob.com/w3cnote/git-guide.html

      https://www.zhihu.com/question/27712995/answer/39946123

      https://blog.csdn.net/bdss58/article/details/40537859

      https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576

     

  • 相关阅读:
    RecyclerView 数据刷新的几种方式 局部刷新 notify MD
    【图片】批量获取几万张图片
    RV BaseRecyclerViewAdapterHelper 总结 MD
    RecyclerView.ItemDecoration 间隔线
    Kotlin【简介】Android开发 配置 扩展
    Kotlin 特性 语法糖 优势 扩展 高阶 MD
    一个十分简洁实用的MD风格的UI主框架
    折叠伸缩工具栏 CollapsingToolbarLayout
    FloatingActionButton FAB 悬浮按钮
    Glide Picasso Fresco UIL 图片框架 缓存 MD
  • 原文地址:https://www.cnblogs.com/jason-notbook/p/15528650.html
Copyright © 2011-2022 走看看