zoukankan      html  css  js  c++  java
  • Git学习(二)

    Git基础

    使用Git的一些特点

    1. 直接记录快照,而非差异比较
    2. 近乎所有操作都是本地执行
    3. 时刻保持数据完整性
    4. 多数操作仅添加数据
    • git status :查看当前 git 的信息
    • git add .:把当前目录添加到暂存区
    • git add <filename>:添加到暂存区(.git/index)
    • git commit -m "信息":添加到版本库(.git)
    • git push:提交到远程
    • git log:查看日志
    • git reset [gitid]:退回到哪个状态
    • git show [gitid]:展示git操作
    • ssh-keygen -t rsa -b 4096 -C "your_email@example.com":生成 ssh
    • clip < ~/.ssh/id_rsa.pub:将ssh内容复制到剪切板上
    • git clone ssh值:下载到本地
    • git pull:拉一下远程
    • git checkout master:切换到主分支
    • git branch branch1:创建分支branch1
    • git checkoreut branch1:切换到分支branch1
    • git checkout -b branch1:创建并且切换到branch1分支
    • git push --set-upstream origin branch2:在远程建立branch2分支
    • git push -u origin master:推送到远程origin仓库的master分支
    • git branch -vv:查看当前所属的分支

    文件的三种状态

    对于任何一个文件,在git内都只有三种状态

    1. 已提交(commited):表示该文件已经被安全的存放到本地版本库中。
    2. 已修改(modified):表示修改了某个文件,但还没有提交保存,换句话说,此文件在本地工作目录已修改,但是没有放到暂存区中。
    3. 已暂存(staged):把已修改的文件放在下次提交的时要保存的清单中,换句话说,就是此文件在暂存区中。
    1. 如果git目录中保存着特定版本的文件,就属于已提交状态。

    2. 如果做了修改并已放到暂存区域,就属于已暂存状态

    3. 如果自上次取出后,做了修改但还没有放到暂存区域,就属于已修改状态

    每个项目都有一个git目录

    • 如果使用git clone,就是其中的.git目录

    • 如果使用git clone --bare,新建的目录本身就是git目录

    该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据

    下图展示了工作区、暂存区和版本库之间的关系

    Git工作流程

    1. 在工作目录中修改某些文件
    2. 对修改后的文件进行快照,然后保存到暂存区域
    3. 提交更新,将暂存区中的文件保存到版本库

    删除文件

    使用 git rm 文件名命令,就是从已跟踪文件清单中移除,也就是从暂存区中移除。

    使用前提:此文件已经在暂存区域中存在。

    如果只是简单从工作目录中删除文件,直接 rm filename即可,不用 git命令

    Changed but not updated:修改了,但没有添加到暂存区

    • git rm --cached filename:仅仅删除暂存区里的文件
    • git rm -f filename:删除暂存区和工作区的文件(此文件已经在暂存区且删除之前内容在工作空间修改过)
    • git rm filename:删除暂存区和工作区的文件

    版本回退

    如果不仅添加到了暂存区,而且提交到了版本库,这个时候不能用 git rm 文件名 命令

    需要使用 git reset 版本库ID

    git reset 有三个选项:

    1. git reset -- soft 版本库ID:撤销已经提交的版本库,不会修改暂存区和工作区
    2. git reset -- mixed 版本库ID:撤销已经提交的版本库和暂存区,不会修改工作区
    3. git reset -- hard 版本库ID:彻底将工作区、暂存区、版本库恢复到指定的版本库

    查看已暂存和未暂存的更新

    1. git diff:比较当前文件在工作目录中和在暂存区域快照之间的差异

    将 a.txt 文件添加到暂存区,然后修改它,但是别暂存,运行git status命令才会有内容

    1. 如果文件没有加入到暂存区域,单单运行git diff是什么也没有的
    2. 如果一下暂存了所有更新过的文件,例:git add .,运行git diff也是什么也没有的
    3. 红色文字代表从当前开始是追加的,绿色文字代表是新添加的,白色代表是原始数据。
    1. git diff --cached:比较暂存起来的文件和上次提交的文件之间快照的差异

    :git 1.6.1及更高版本还允许使用 git diff --staged,效果时相同的

    当你修改文件时,需要再次执行git add <filename>命令,添加到暂存区,才能进行比较

    忽略某些文件

    一般我们总会有些文件无需纳入git的管理,也不希望它们总出现在未跟踪的文件列表中,通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。

    我们可以创建一个名为.gitignore的文件,列出要忽略的文件模式

    例如:

    # 此为注释 – 将被 Git 忽略
    *.a       # 忽略所有 .a 结尾的文件
    !lib.a    # 但 lib.a 除外
    

    跳过使用暂存区域

    要使用跳过暂存区域,是在所有文件已经被跟踪过的基础上

    不用再次使用git add .(将所有的文件再次添加到暂存区,在提交到版本库中),而是直接提交到版本库,一步到位。

    8. 对文件的重命名

    • git mv file_src file_dist:将原文件名修改为目标文件名

    查看提交历史

    每次更新都有一个SHA-1校验、作者的名字、电子邮箱地址、提交时间以及提交说明(注释)

    1. git log默认带参数,会按时间列出所有的更新,最新的排在上面。
    2. git log -p:显示每次提交的内容差异
    3. git log -n:显示最近的n次更新

    远程仓库的使用

    查看当前的远程仓库

    1. git remote:查看当前配置有哪些远程仓库,它会列出每个仓库的简短名字。

    在clone完某个仓库后,至少可以看到一个名为 origin的远程仓库,git默认使用这个名字来标识你所克隆的原始仓库

    1. git remote -v:显示远程仓库和对应的克隆地址

    v即为 verbose(冗长的)的简写

    如果有多个远程仓库,此命令将全部列出

    添加远程仓库

    1. git remote add [shortname] [url]:添加一个远程仓库并指定一个简单的名字(方便来引用)。

    从远程仓库抓取数据

    1. git fetch [remote_name]:从远程仓库中拉取本地没有的数据到本地。

    1. fetch命令只是将远端的数据拉动本地仓库,并不自动合并到当前工作分支,需要手动合并。
    2. 如果是clone一个仓库,此命令会自动将远程仓库归于origin仓库下,git fetch origin:会抓取自你上次克隆别人仓库以来,别人对这个仓库的所有更新文件。

    1. 如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。
    2. 实际上,默认情况下git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。
    3. 一般我们运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。

    推送数据到远程仓库

    项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库的数据推送到远程仓库。

    必须保证本地仓库里面有提交,注意是本地仓库而不是暂存区

    1. git push [remote_name] [branch_name]:把本地的master分支推送到origin服务器上

    1. 克隆操作会自动使用默认的masterorigin名字
    2. 只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。
    3. 如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。

    查看远程仓库的信息

    1. git remote show [remote_name]:查看某个远程仓库的详细信息。

    查看克隆仓库的信息:git remote show origin

    远程仓库的删除和重命名

    在新版git中可以使用git remote rename命令修改某个远程仓库在本地的简短名称

    1. git remote rename [src_name] [dist_name]:给远程仓库重命名

    :对远程仓库的重命名,也会使对应的分支名称发生变化

    1. git remote rm [remote_name]:移除对应的远程仓库

    检查当前文件状态

    要确定哪些文件当前处于什么状态,可以用git status命令

    刚把仓库克隆完,工作目录相当干净,换句话说,当前没有任何跟踪着的文件,也没有任何文件在上次提交后更改过。

    Untracked files这行下面。git不会自动将之纳入跟踪范围,除非你明明白白地告诉它:"我需要跟踪该文件",因而不用担心把临时文件什么的也纳入版本管理。

    跟踪新文件

    • 使用命令git add开始跟踪一个新文件

    • Changes to be committed这行下面,就说明是已暂存状态。如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。

    • git add后面可以指明要跟踪的文件或目录路径

    • 如果是目录的话,就说明要递归该目录下的所有文件。

    其实 git add的潜台词就是把目标文件的快照放入暂存区,也就是 add file into staged area,同时未曾跟踪过的文件标记为需要跟踪

    暂存已修改的文件

    Changed but not updated这行下面,说明已跟踪的文件内容发生了变化,但还没有放到暂存区。

    要暂存这次更新,需要运行git add命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果不同)

    1. 可以用来跟踪新文件
    2. 把修改过的已跟踪的文件放到暂存区
    3. 用于合并时把有冲突的文件标记为已解决状态
  • 相关阅读:
    使用Spring Cloud Gateway保护反应式微服务(二)
    使用Spring Cloud Gateway保护反应式微服务(一)
    浅谈Spring 5的响应式编程
    使用Spring Data JPA的Spring Boot
    在简单的JDBC程序中使用ORM工具
    Python爬虫
    数据库建模之概念模型、逻辑模型、物理模型
    机器学习(周志华)——学习笔记2
    HTTP——无状态协议理解
    Tomcat中文乱码问题
  • 原文地址:https://www.cnblogs.com/rainszj/p/12188486.html
Copyright © 2011-2022 走看看