首页 > 其他分享 >GIT--快速入门

GIT--快速入门

时间:2022-08-23 17:44:44浏览次数:66  
标签:文件 git 入门 -- --- GIT 提交 分支

本文仅用于作者个人学习记录,如有侵权请联系删除

什么是Git

分布式版本控制和源代码管理系统软件

GIT中的基础概念

GIT分区

Workspace:工作区
    //通过git init创建的代码库不包含.git(版本库)
​
Index/Stage:暂存区---索引
    //通过 add ./*/*Xxxx/Xxxx* 添加的修改都进入了暂存区
    //通过git status 可以查看到修改状态
Repository:仓库区(本地仓库),存储库
Remote:远程仓库

img

版本控制系统(VCS)

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

本地版本控制系统

RCS,现今许多计算机系统上都还看得到它的踪影。
甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。
它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统

为了让不同系统的开发者协同工作
CVCS/SVN:
    有一个单一的集中管理的服务器---保存所有文件的修订版本
    协同工作---通过客户端连接服务器
    
    //缺点:只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统

DVCS:
    客户端将最新版本完全镜像。
    可以指定和若干个不同的远端代码仓库进行交互。

GIT基础和原理

直接记录快照,而非比较差异

其他:
    将保存的信息看作一组基本文件和每个文件随时间逐步累积的差异
    存储每个文件与初始版本的差异
Git:
    快照流,修改提交时,对当前全部文件制作一个快照并保存这个快照的索引
    无修改时,不重新存储该文件,而是保留一个链接指向之前存储的文件

其他:

img

GIT:

img

近乎所有操作都是本地执行

GIT保证完整性

数据存储前计算校验和,以校验和引用
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:
24b9da6552252987aa493b52f8696cd6d3b0037
​
//实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

一般只添加数据

难以再丢失数据

三种状态img

已提交(committed): 已提交表示数据已经安全的保存在本地数据库中
已修改(modified):已修改表示修改了文件,但还没保存到数据库中
已暂存(staged):已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
GIT仓库:用来保存项目的元数据和对象数据库的地方
工作目录:从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改
暂存区域:保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作‘索引’

工作流程:

1.在工作目录中修改文件。
2.暂存文件,将文件的快照放入暂存区域。
3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

GIT使用前配置

配置用户名称和邮件地址

$ git config --global user.name "maxsu"
$ git config --global user.email [email protected]
​
//如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用这些信息。公司账号已经配置好了

检查配置信息

git config --list
​
yiibai@ubuntu:~$ git config --list
user.name=maxsu
[email protected]
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
​
git config <key>  ---检查单行信息

获取帮助

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

要想获得 config 命令的手册,执行

$ git help config

快速入门

创建远程仓库(Repository)

//安装,去百度下载对应版本即可
远程仓库包含:
    许多commit objects
    到commit objects的指针,叫做heads
    Git的仓库和工程存储在同一个目录下,在一个叫做.git的子目录中。
http://git.oschina.net/  ---国内仓库   国外--github

克隆现有仓库-clone

git clone + 仓库地址
克隆该仓库服务器上的所有数据,每一个文件的每一个版本都会被拉取下来
//仓库地址在http://git.oschina.net  项目管理里--code--clone or download
​
会在当前目录下创建:“git-start.git”的目录,并初始化一个.git文件夹(存放拉取数据)
​
自定义本地仓库名字:git clone + 仓库地址 mygit-start
​
//支持多种传输新协议:http://协议   git://协议  ssh传输协议   

在现有目录中初始化仓库-init

$ git init
$ git commit
创建.git的子目录--包含初始化Git仓库中所有的必须文件
已经存在文件的文件夹初始化Git仓库进行版本控制,应该开始跟踪这些文件并提交
//git add 命令实现对指定文件的跟踪,然后执行 git commit 提交
//git commit -m 'initial project version'

检查当前文件状态-git status

$ git status
//默认分支名:master
//当前目录下没有出现任何于为跟踪状态的新文件

新建文件没有被追踪的情况

跟踪新文件-git add

$ git add mytext.txt
再次运行 git status---mytext.txt处于暂存状态
    
    //如果git add 后以目录路径为参数---递归跟踪该目录下的所有文件
​
暂存状态:只要处于changes to be committed这行下---暂存状态---被记录保存在历史记录中

暂存已修改文件

跟踪了README.md,但之后对其进行修改了,再次查看 git status

此时文件在changes not staged for commit下---表示还未进入暂存区---需要重新git add
//添加内容到下一次提交中
READNE.md 同时出现在暂存区和非暂存区
//git add只是暂存了运行此命令时候的版本,如果后面又修改了,需要重新git add

状态简览-status -s

git status -s -----紧凑格式展示
​
    ?? ---未跟踪文件
    A ---新添加到暂存区的文件
    M ---修改过的文件---靠左边M文件被修改并放入了暂存区,靠右边的M被修改没放进暂存区
    MM---在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录

忽略文件-.gitignore

用于不需要GIT管理,且不想出现在??表的
可创建.gitignore文件 ,列出要忽略的文件模式
​
cat .gitignore
*.[oa] --忽略所有 .a .o结尾的文件
*~
文件 .gitignore 的格式规范如下:http://github.com/github/gitignore
​
1.所有空行或者以 # 开头的行都会被 Git 忽略。
2.可以使用标准的 glob 模式匹配。
3.匹配模式可以以(/)开头防止递归。
4.匹配模式可以以(/)结尾指定目录。
5.要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

查看已暂存和未暂存的修改--diff

git diff---用于查看具体修改了哪些地方,只用于没暂存的
​
git diff --cached/--staged 查看已经暂存起来的变化
图形化差异分析
    git difftool
    git difftool --tool-helo    用于看系统支持哪些Git Diff插件

提交更新--commit

git status  ---先查看还有哪些修改了,没有git add过
git add
git commit  ---启动文本编辑器以便输入本次提交的说明
​
//提交时记录的是放在暂存区域的快照

跳过使用暂存区--commit -a

自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
​
git commit -a -m 'added new benchmarks'

移除文件-rm

用于从已跟踪文件清单中移除(从暂存区移除)---提交---将不会再出现在未跟踪文件清单了
如果是用手工删除 还是会出现在未暂存清单里
​
git rm
git rm -f 如果删除之前,修改过的文件已经存放在暂存区,需要强制删除
git rm --cached xxx  从暂存区删除,但是又想保存在磁盘,不想git继续跟踪
git rm 列出文件/目录名字

移动文件-mv

执行git mv相当于
    mv README.md README
    git rm README.md
    git add README
        这三条命令的集合
        
$ git mv file_from file_to  ---重命名

查看提交历史-log

一般会列出:
    按提交时间理出所有的更新,最新的在上面
    SHA-1校验和
    作者的名字和电子右键地址
    提交时间
    提交说明
git log -p -2   显示每次提交的内容差异,显示近两次的提交
git log --stat  看每次提交的简略的统计信息
                额外列出所有被修改过的文件、有多少文件被修改了
                以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结

git log --pretty    指定使用不同于默认格式的方式展示提交历史
        --pretty=oneline 以一行列出展示  
        --pretty=format 定制要显示的记录格式 
        $ git log --pretty=format:"%h - %an, %ar : %s"
    
        
        //short 、full、fuller  展示信息多少

git log --graph 以ASCII字符串形象的展示分支,合并历史

撤销操作

git commit --amend

git commit --amend  如果漏掉文件没添加用这个/提交信息写错了
                    提交后没修改,快照不变,所修改的只是提交信息
                    提交了两次,但是第二次提交会替换第一次提交的结果

 

取消暂存的文件--reset

假设:有两个文件都暂存了,想取消其中的一个

撤销对文件的修改--checkout

git checkout -- 文件   //checkout的用法之一
​
假设我更改了文件,然后已经保存到暂存区了,此时我不想更改之前的操作了

远程仓库的使用

查看远程仓库 -remote

git remote
列出指定的每一个远程服务器的简写
​
clone了自己的仓库----会看到origin----系统默认名

git remote -v 显示需要读写远程仓库使用保存的简写 + 对应URL
              会显示全部远程仓库,列出详细信息
​
URL:是“统一资源定位符”(Uniform Resource Locator)的首字母缩写,中文译为“网址”

添加远程仓库-add

git remote add <shortname> <url>
​
例子中,用wy替代整个url
​
拉取仓库中有但我没有的信息---git fetch gs

现在master 分支可以通过本地 wy/master访问
可合并进自己的某个分支

从远程仓库中抓取和拉取-fetch/pull

git fetch [remote-name]
    是从远程获取最新版本到本地,不会自动合并
    
    //1.git fetch origin 抓取克隆后新推送的所有工作
    //2.会将数据拉取到本地仓库--并不会自动合并和修改
    /*假设:有一个分支设置为跟踪一个远程分支
            git pull 自动抓取然后合并远程分支到当前分支
            git clone 会自动设置本地master分支,跟踪克隆的远程仓库的master分支
            运行git pull---从最初克隆的服务器上抓取数据并自动尝试合并到当前所在分支*/
    
git pull
    从远程获取最新版本并merge到本地
    
    //fetch 完整过程--fetch--diff--merge

推送到远程仓库-push

git push [remote-name] [branch-name]
将master 分支推送到 origin服务器 (master和origin克隆时候自动设置好了)
​
git push origin master

推送成功

查看远程仓库-show

git remote show [remote-name]

远程仓库的移除与重命名--rename

重命名:
    git remote rename wy newwy   将wy更名为newwy
    git remote

移除:
    git remote rm newwy
    git remote

进阶操作

获取最新更改--pull

情景:当有其他人对远程仓库推送过修改的代码,此时你想推送你的修改时,需要先更新本地才能推送
    //建议推送前先更新代码
git pull
        将本地仓库与远程仓库同步
        pull同步后,查看修改的位置,更改后再提交

GIT隐藏操作--Stash

情景:当遇到突发情景,一段时间内不能提交代码,需要保存之前所做的工作,等情况处理完之后才能提交
     这个时候就会用到隐藏---修改跟踪文件,阶段更改,并保存一系列未完成的更改,且可随时重新应用

git stash 之后,工作去状态目录为干净
​
git stash list ---用来查看已存在更改的列表
    
git stash pop  ---当突发情况解决完,想恢复到之前的状态---从堆栈中删除更改并放置在当前工作目录中

移动/重命名操作--mv

需要移动文件/目录的时候  ----  重命名
git mv 文件 移至文件位置
​
git mv 原文件  重命名
更改结构后----其他人需要PULL后才能看见结构修改

修正错误

checkout 命令

快速入门里有介绍

删除分段区域的更改

GIT 中 有一个HEAD指针指向最新的提交
想从分段区域撤销更改 使用
    git checout head --string.py
    ---重置工作树,并删除分段更改

用Git复位移动头指针--reset

img

img

--soft 选项

--soft
选项后跟提交ID的Git reset命令
那么它将仅重置HEAD指针而不会破坏任何东西。
    
重置HEAD指针
    git reset --soft (commit ID) 
    //之前那笔待提交还是会在暂存区

--mixed选项

从尚未提交的暂存区域还原修改
git reset -mixed commit ID(7位有效)

--hard选项

将清除分段区域,并且HEAD指针重置为特定提交ID,删除本地修改
//与soft的区别,会清除更改

GIT标签操作

标签---收藏夹--收藏标记的是当前HEAD指针
​
创建:
git tag -a '标签名称' -m '标签信息'
​
提交:
    提交使用的是对应的 CMMIT ID 非 HEAD指针
    git push origin xxx
    (提交是提交的tag标签,远程仓库没有变,查看tag标签可以看到那一次记录的快照)

 

查看标签:
    git tag -l  查看所有分支下所有可用的tag(在其他分支上也能看见)
删除标签:git tag -d 标签名

补丁操作

管理分支

用于不同方向上的开发,例如:对新版本2.0的开发,与旧版本1.0的修正

创建分支--branch

git branch <branch name>  从现有分支创建一个新分支
                          也可以特定提交和标签作为分支创建的起点
                          没有ID,以HEAD为起点创建
​
git branch 列出分支

img

img

切换分支--checkout,switch

git checkout 分支名
git switch 分支名

创建并切换分支

git checkout -b 分支名

删除分支

git branch -D 删除前必须切换到其他分支才能操作
在当前分支,删除自己所处的分支---无法删除

删除其他分支

重命名分支

git branch -m 旧分支名 新分支名

合并两个分支

方法1

假设:有两个分支  master
              *wchar_support
              
     在master分支上做了一些代码修改,现在想将这些修改推送到分支wchar_support
     修改文件为 XXX.c
     先git add XXX.c  再git commit -m 'xxxx'
     git push origin wchar_support(将更改推送到新分支)

img

 

git log oringin/wchar_support -2 查看在这个分支上做了什么

方法2--git merge

用于将两个,或者两个以上的开发历史(合并)一起
​
1.合并分支1 和分支2 在当前分支的顶部,合并
    git merge 分支1 分支2
​
2.合并 分支1 到当前分支--ours
    git merge -s ours 分支1
​
3.合并分支1到当前分支,但不要自动进行新的提交
    git merge --no-commit 分支1
​
4.将分支1合并到当前分支,自动进行新的提交
    git merge dev

 

处理冲突

假设: user1在wchar_support分支中执行更改---修改1
      user2在master分支中执行更改---修改2--并推送到origin
      
      此时user2想看wchar_support上分支做了什么,拉取最新情况---此时user1,user2同时GIT---冲突出现
      
      
解决冲突:①git diff 查看更多细节
        <<<<<<<<<<<<<<<< 和 >>>>>>>>>>>>>>>>>>>>的行
        查看冲突出现的具体位置
        ②选择需要保留的版本手动修改
        ③对修改后的文件进行提交--再次git pull 即可

标签:文件,git,入门,--,---,GIT,提交,分支
From: https://www.cnblogs.com/Yang-99-W/p/16617184.html

相关文章

  • 一、锁的状态    Java中的锁有几种状态:无锁→偏向锁→轻量级锁→重量级锁偏向锁:偏向于第一个访问锁的线程。二、锁的优缺点锁优点缺点适用场景......
  • Rock Pi 3A 板子"Unknown ISPC compiler"问题
    在rockpi3A的debian系统上编译open3d的时候,在cmake阶段总是卡在"UnknownISPCcompiler"这个错误这里。rockpi3A烧写debian/ubuntu教程:ROCKPI3A资料open3d编译过程......
  • Mysql导入数据的时候报错Unknown collation: 'utf8mb4_0900_ai_ci'什么问题?
    最近从线上把数据导出来想搭建到本地的时候报了这么一个错?[ERR]1273-Unknowncollation:'utf8mb4_0900_ai_ci'这个错误究竟是什么原因影响的呢?是因为我们导出数据的......
  • CATIA——Catia包络体与凸台(实体)之间的区别是什么?
      参考:https://www.zhihu.com/question/354508653/answer/2165973396 ......
  • 7-2 递增有序顺序表的插入
    7-2递增有序顺序表的插入分数10作者daxuejsj单位安阳工学院实验目的:1、掌握线性表的基本知识2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及......
  • 结绳
    https://www.acwing.com/problem/content/1620/#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=10010;intn;d......
  • 三次插值
    优化问题通常涉及以值表形式给出的函数,例如一幅图像。计算这些函数以及他们的导数需要对这些值进行插值。插值表格函数是一个广泛的研究领域,有许多库已经实现了一些插值问......
  • Kubernetes上安装KubeSphere
    1.安装Dockersudoyumremovedocker*sudoyuminstall-yyum-utils#配置docker的yum地址sudoyum-config-manager\--add-repo\http://mirrors.aliyun.com/docker......
  • 5. PyTorch模型定义
    5.1PyTorch模型定义的方式5.1.1必要的知识回顾Module类是torch.nn模块里提供的一个模型构造类(nn.Moduel),是所有神经网络模块的基类,通过继承nn.Moduel定义所需的模型。......
  • 2018软测错题集
    1、     ......