zoukankan      html  css  js  c++  java
  • git的使用

    1 Git简介
    Git是目前世界上最先进的分布式版本控制系统(没有之一)。
    2 Windows上安装Git
    1. 在网上下载国内镜像Git的安装程序
    2. 安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
    3. 安装完成后,还需要最后一步设置,在命令行输入:(注:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置)
    • $ git config --global user.name "Your Name"
    • $ git config --global user.email "email@example.com"
    3 创建版本库
    1、选择一个合适的地方,创建一个空目录:
    • $ mkdir app//创建一个叫app的文件夹
    • $ cd app //切换到app目录下
    • $ pwd //查看当前目
    2 、通过git init命令把这个目录变成Git可以管理的仓库(如果已有文件,则忽略第一步):
    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository)
    • 目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
    • 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
    3、现在我们编写一个readme.txt文件放在app目录下,内容如下:
    1111
    然后:
    1. 用命令git add告诉Git,把文件添加到仓库:
    $ git add readme.txt
    执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
    1. 用命令git commit告诉Git,把文件提交到仓库:
    $ git commit -m "wrote a readme file"
    解释一下git commit命令,-m后面输入的是本次提交的说明.
    为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
    • $ git add file1.txt
    • $ git add file2.txt file3.txt
    • $ git commit -m "add 3 files."
    4、成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,我们继续修改readme.txt文件,改成如下内容:
    11111
    22222
    现在,运行git status命令看看结果:
    git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
    5、虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:
    知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add,在执行第二步git commit之前,我们再运行git status看看当前仓库的状态:
    git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了。
    提交后,我们再用git status命令看看仓库的当前状态:
    Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。
    4 版本回退
    4.1 git log
    “保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作.
    实际工作中,版本控制系统用git log命令可以告诉我们历史记录:
    git log命令显示从最近到最远的提交日志。
    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
    你看到的一大串类似3628164...882e1e0的是commit id(版本号),一大串数字防止跟别人的版本号冲突
    4.2 git reset
    首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
    现在,我们要把当前版本回退到上一个版本,就可以使用git reset命令:$ git reset --hard HEAD^(注:--hard参数
    还可以继续回退到再上一个版本,不过且慢,然我们用git log再看看现在版本库的状态:
     
    • 此时你反悔不想回退,想回到刚刚删除的那个未来版本,办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个版本commit id3628164...,于是就可以指定回到未来的某个版本:
    $ git reset --hard 3628164
    版本号没必要写全,前几位就可以了。
    • 上面的命令行窗口被关掉了!在Git中,总是有后悔药可以吃的。你必须找到commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
    4.3 小结
    现在总结一下:
    • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
    • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
    • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
    5 撤销修改
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- fileName
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD fileName,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
    6 添加远程库
    6.1 本地库与远程库关联
    git remote add origin https地址
    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
    6.2 把本地库的所有内容推送到远程库上
    $ git push -u(第一次提交到远程空库,以后可以忽略) <远程库名> <远程库分支名> (如:$ git push -u origin master)
    7 从远程库克隆
    远程库已经准备好了,下一步是用命令git clone克隆一个本地库:
    $ git clone https地址
    8 分支管理
    分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
    现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
    8.1 Git分支管理
    9 解决冲突
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
    git log --graph命令可以看到分支合并图。
    具体原理可以查看:
    10 Bug分支
    当你接到一个很急的bug,但是,等等,当前正在dev上进行的工作还没有提交,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
    现在在比如develop分支上创建一个bug分支,bug解决后合并到develop分支,并删除bug分支,现在要接着完成之前的工作。
    • git stash //当前工作现场“储藏”起来
    • $ git stash list //查看刚才的工作现场存到哪去了
    • git stash apply //恢复后,stash内容并不删除,你需要用git stash drop来删除;
    • git stash pop //恢复的同时把stash内容也删了
    开发一个新feature,最好新建一个分支;
    如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
    11 Git与可视化工具小乌龟对应
    • git提交(c)->master //相当于“git add”,提交到本地仓库
    • Git同步 //相当于git push origin master 提交到远程仓库(其中分支可选)
    12 重要
    当我想从远程仓库里拉取一条本地不存在的分支时:git checkout -b 本地分支名 origin/远程分支名,这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来。如果出现提示:
    fatal: Cannot update paths and switch to branch 'dev2' at the same time. Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
    表示拉取不成功。我们需要先执行:git fetch
    然后再执行
    git checkout -b 本地分支名 origin/远程分支名
  • 相关阅读:
    How can TCP ACKs be used to measure latency to a server?
    信息安全技术实用教程(第4版)
    java.util基础复习
    Java.IO基础复习
    vue3 打包插件后出现的带有slot的插件报 reading isCE问题
    vue3的一些基本常识(slot,ref)
    webpack常用配置说明(以webpack5为主)
    谷歌上不能在页面加载的时候播放音频解决办法
    vite vue插件打包配置
    Vue3中typescript编译遇到的问题(props的validator)
  • 原文地址:https://www.cnblogs.com/fatty-yu/p/8689053.html
Copyright © 2011-2022 走看看