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

     

  • 相关阅读:
    手机验证码登录注册--
    防止注册机,登录时-验证码图片的生成=前端vue+后端node
    VUE中数据排序sort() / 数据反转 reverse() 的使用
    将后台数据数组对象(对象里边包含数组对象)---改为前端想要的数组对象--改变key值(替换)
    vue--ui:antd pro框架--vue.config.js引入高德地图--描绘轨迹
    创建数据库-表-增加,设置主键
    mysql--各种安装包版本安装
    Vuex异步请求存取步骤
    从后往前查找去掉字符串最指定元素
    python安装第三方库
  • 原文地址:https://www.cnblogs.com/jason-notbook/p/15528650.html
Copyright © 2011-2022 走看看