git学习笔记

一、Git基本介绍

1、Git结构

在这里插入图片描述

2、本地库和远程库

2.1团队内部协作

在这里插入图片描述

pull与clone的区别:

  • 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是将一个库复制到你的本地,是一个本地从无到有的过程,其中包含了本地初始化的操作)

  • 从远程服务器获取到一个branch分支的更新到本地,并更新本地库,叫做pull.(pull是指同步一个在你本地有版本的库内容更新的部分到你的本地库)

  • git clone是远程操作的第一步,通常是从远程主机克隆一个版本库

    $ git clone ##   
    该命令会在本地主机生成一个目录,与远程主机的版本库同名
    
    如果要是制定不同的目录名,可以将目录名作为git clone 命令的第二个参数。
    eg:$ git clone #版本库网址# #本地目录名#  
    
    git clone支持多种协议,除了http(s),还有ssh,git,本地协议。
    
  • git pull 作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

    eg:$ git pull ##远程主机(origin) #远程分之(next)#:#本地分之(master)#
    如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
    eg:$ git pull #远程主机(origin)# #远程分之(next)# 
    相当于1. $ git fetch origin   2.$git merge origin/next 
    

    2.2跨团队协作

    在这里插入图片描述

二、Git命令行操作

1、本地库初始化

创建文件夹WeChat

Y@SYY MINGW64 /e/Git
$ mkdir WeChat

进入WeChat,进行本地初始化

Y@SYY MINGW64 /e/Git/WeChat
$ git init
Initialized empty Git repository in E:/Git/WeChat/.git/

查看显性文件、隐藏文件

Y@SYY MINGW64 /e/Git/WeChat (master)
$ ll	#查看显性文件
total 0

Y@SYY MINGW64 /e/Git/WeChat (master)
$ ls -la	#查看隐藏文件
total 4
drwxr-xr-x 1 Y 197121 0 Oct 22 09:39 ./
drwxr-xr-x 1 Y 197121 0 Oct 22 09:37 ../
drwxr-xr-x 1 Y 197121 0 Oct 22 09:39 .git/

查看.git/目录

Y@SYY MINGW64 /e/Git/WeChat (master)
$ ll .git/
total 7
-rw-r--r-- 1 Y 197121  23 Oct 22 09:39 HEAD
-rw-r--r-- 1 Y 197121 130 Oct 22 09:39 config
-rw-r--r-- 1 Y 197121  73 Oct 22 09:39 description
drwxr-xr-x 1 Y 197121   0 Oct 22 09:39 hooks/
drwxr-xr-x 1 Y 197121   0 Oct 22 09:39 info/
drwxr-xr-x 1 Y 197121   0 Oct 22 09:39 objects/
drwxr-xr-x 1 Y 197121   0 Oct 22 09:39 refs/

注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

2、设置签名

2.1形式

用户名:syy

email地址(随便设置,可以不存在):1204201145@qq.com

2.2作用

  • 区分不同开发人员的身份

  • 这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关

2.3命令

  • 项目级别/仓库级别:仅在当前本地库范围内有效:

    关键字:git config user.name 用户名

    git config user.email 邮箱

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git config user.name syy
    
    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git config user.email 1204201145@qq.com
    

    信息保存位置:./.git/config文件

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ cat .git/config
    [core]
            repositoryformatversion = 0
            filemode = false
            bare = false
            logallrefupdates = true
            symlinks = false
            ignorecase = true
    [user]
            name = syy
            email = 1204201145@qq.com
    
    
  • 系统用户级别:登录当前操作系统的用户范围

    关键字:git config --global user.name 用户名

    git config --global user.email 邮箱

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git config user.name syy_glb
    
    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git config user.email 1204201145_glb@qq.com
    

    信息保存位置:~/.gitconfig文件

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ cat ~/.gitconfig
    [filter "lfs"]
            clean = git-lfs clean -- %f
            smudge = git-lfs smudge -- %f
            process = git-lfs filter-process
            required = true
    [user]
            name = syy_glb
            email = 1204201145_glb@qq.com
    

注意:进入系统路径 cd 代表系统

Y@SYY MINGW64 /e/Git/WeChat (master)
$ cd ~

Y@SYY MINGW64 ~
$ pwd
/c/Users/Y
  • 级别优先级

    就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别

    的签名 。

    如果只有系统用户级别的签名,就以系统用户级别的签名为准 。二者都没有不允许的权限限制

3、基本操作

3.1状态查看

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git status
On branch master	#当前分支

No commits yet	#本地仓库
nothing to commit (create/copy files and use "git add" to track)	#缓存区

查看工作区、暂存区状态

3.2添加文件

关键字:git add [file name]

将工作区的“新建/修改”添加到暂存区

Y@SYY MINGW64 /e/Git/WeChat (master)		#编辑并创建文件
$ vim good.txt

Y@SYY MINGW64 /e/Git/WeChat (master)
$ cat good.txt	#查看文件内容
123456
i love u
do u know that

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git add good.txt	#提交文件
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git status	#查看缓存区状态
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   good.txt

3.3提交

关键字:git commit -m “commit message” [file name]

将暂存区的内容提交到本地库

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git commit -m "This is my first commit for the new file:good.txt" good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory
[master (root-commit) e81d234] This is my first commit for the new file:good.txt	#提交信息
 1 file changed, 3 insertions(+)
 create mode 100644 good.txt
 
Y@SYY MINGW64 /e/Git/WeChat (master)	#缓存区已清空
$ git status
On branch master
nothing to commit, working tree clean

3.4查看历史记录

关键字:git log (可以显示所有的记录)

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git log
commit c40cd8e1800b3e8b9bb7e91dfcac13fd08e489d7 (HEAD -> master)
Author: syy <1204201145@qq.com>
Date:   Fri Oct 22 10:49:07 2021 +0800

    This is a change.

commit e81d2342afc55955e5441a86f8d6e079d73a09a9
Author: syy <1204201145@qq.com>
Date:   Fri Oct 22 10:38:06 2021 +0800

    This is my first commit for the new file:good.txt

拓展:单行查看log(若是进行了回退操作,只能显示之前的记录)

git log --pretty=oneline

git log --oneline

git reflog:可以查看回退步数,HEAD@{2}表示回退2步即可回到当前版本。

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git log --pretty=oneline
c40cd8e1800b3e8b9bb7e91dfcac13fd08e489d7 (HEAD -> master) This is a change.
e81d2342afc55955e5441a86f8d6e079d73a09a9 This is my first commit for the new file:good.txt

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git log --oneline
c40cd8e (HEAD -> master) This is a change.
e81d234 This is my first commit for the new file:good.txt

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git reflog
04e5a05 (HEAD -> master) HEAD@{0}: commit: insert aaaaaabbbbb
c40cd8e HEAD@{1}: commit: This is a change.	
e81d234 HEAD@{2}: commit (initial): This is my first commit for the new file:good.txt

3.5前进后退

本质:操作head指针

在这里插入图片描述

  • 基于索引值操作(推荐)

    git reset --hard 局部索引值

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git reflog
    04e5a05 (HEAD -> master) HEAD@{0}: commit: insert aaaaaabbbbb
    c40cd8e HEAD@{1}: commit: This is a change.	
    e81d234 HEAD@{2}: commit (initial): This is my first commit for the new file:good.txt
    
    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git reset --hard c40cd8e
    HEAD is now at c40cd8e This is a change.
    
    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ cat good.txt
    123456
    i love u
    do u know that
    i know that
    
    
    • 使用~符号:只能后退

      git reset --hard HEAD~n:表示后退n步

3.6删除文件并找回

前提:删除前,文件存在时的状态提交到了本地库。

关键字:git rm 文件

找回操作:git reset --hard [指针位置]

删除操作已经提交到本地库:指针位置指向历史记录

删除操作尚未提交到本地库:指针位置使用 HEAD

3.7比较文件差异

  • git diff [文件名]

将工作区中的文件和暂存区进行比较

  • git diff [本地库中历史版本] [文件名]

将工作区中的文件和本地库历史记录比较

不带文件名比较多个文件

4、分支管理

4.1分支好处

同时并行推进多个功能开发,提高开发效率 。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

4.2分支操作

  • 创建分支

    关键字:git branch 分支

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git branch hot-fix
    
  • 查看分支

    关键字:git branch -v

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git branch -v
      hot-fix 5650d7c this is a test.txt
    * master  5650d7c this is a test.txt
    
  • 切换分支

    关键字:git checkout 分支

    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git checkout hot-fix
    Switched to branch 'hot-fix'
    
  • 合并分支

    第一步:切换到接受修改的分支(被合并,增加新内容)上

    git checkout [被合并分支名]

    第二步:执行 merge 命令

    git merge

    Y@SYY MINGW64 /e/Git/WeChat (hot-fix)
    $ git checkout master
    Switched to branch 'master'
    M       good.txt
    
    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ git merge hot-fix
    Already up to date.
    
    Y@SYY MINGW64 /e/Git/WeChat (master)
    $ cat good.txt
    123456
    i love u
    do u know that
    i know that
    aaaaaaa --edit by hot-fix
    
    
    • 解决冲突

      冲突的表现

    在这里插入图片描述

    冲突的解决 :

    第一步:编辑文件,删除特殊符号

    第二步:把文件修改到满意的程度,保存退出

    第三步:git add [文件名]

    第四步:git commit -m “日志信息”

    注意:此时 commit 一定不能带具体文件名

5、Git原理

5.1哈希

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下

几个共同点:

①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。

②哈希算法确定,输入数据确定,输出数据能够保证不变

③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大

④哈希算法不可逆

Git 底层采用的是 SHA-1 算法。

在这里插入图片描述

Git 就是靠这种机制来从根本上保证数据完整性的。

5.2git保存版本的机制

5.2.1集中式版本控制工具的文件管理机制

在这里插入图片描述

以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本

文件和每个文件随时间逐步累积的差异。

5.2.2git的文件管理机制

​ Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前

的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,

Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的

工作方式可以称之为快照流

在这里插入图片描述

6、GitHub使用

6.1创建远程库地址别名

git remote -v 查看当前所有远程地址别名

git remote add [别名] [远程地址]

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git remote add origin https://github.com/SUYAOYANG/TEST01.git

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git remote -v
origin  https://github.com/SUYAOYANG/TEST01.git (fetch)
origin  https://github.com/SUYAOYANG/TEST01.git (push)

6.2推送

git push [别名] [分支名]

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git push origin master

6.3克隆

git origin [远程地址]

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git clone https://github.com/SUYAOYANG/TEST01.git

6.4拉取

pull=fetch+merge

git fetch [远程库地址别名] [远程分支名]

git merge [远程库地址别名/远程分支名]

git pull [远程库地址别名] [远程分支名]

6.5跨团队协作

fork别人的仓库,再提交自己的文件,然后点击pull request来提交自己的合并请求(其中会commit上自己的想法),别人看到了就可以在pull request这里跟你进行聊天沟通,并且还可以看到你commit了什么文件,做了什么修改,最终如果通过的话,别人就点击merge来合并代码。

分支名]**

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git push origin master

6.3克隆

git origin [远程地址]

Y@SYY MINGW64 /e/Git/WeChat (master)
$ git clone https://github.com/SUYAOYANG/TEST01.git

6.4拉取

pull=fetch+merge

git fetch [远程库地址别名] [远程分支名]

git merge [远程库地址别名/远程分支名]

git pull [远程库地址别名] [远程分支名]

6.5跨团队协作

fork别人的仓库,再提交自己的文件,然后点击pull request来提交自己的合并请求(其中会commit上自己的想法),别人看到了就可以在pull request这里跟你进行聊天沟通,并且还可以看到你commit了什么文件,做了什么修改,最终如果通过的话,别人就点击merge来合并代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值