微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

超详细的Git学习记录

超详细的Git学习笔记

从B站搜到的尚硅谷视频学习了Git,记录了一下学习的内容,收获很大

学习地址:
https://www.bilibili.com/video/BV1vy4y1s7k6?p=11&share_source=copy_web

文章目录

Git介绍 分布式版本控制工具 VS集中式版本控制工具

  • Git是什么?

免费开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目

  • Git有什么优点?

易于学习,占地面积小,性能极快。具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion 、CVS、Perforce和ClearCase 等版本控制工具

  • 什么是版本控制?

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

    版本控制最重要的是可以记录文件修改历史记录,从而让用户能够看到历史版本,方便版本切换

    (情景:自己在写东西时,不确定修改后的下一版本是否比上一个版本好,这时候就需要退回上一个版本,把每个版本的文件都另存一份,就能轻松退回上一个版本,就能实现一个简单的版本控制)

  • 为什么要用到版本控制工具?

    个人开发过渡到团队协作

    (情景:在团队协作开发的时候,甲乙两个同学都需要修改自己那部分内容,他们将原先的内容从公司的服务器上下载下来,然后进行修改修改完成时,如果甲乙都上传文件并覆盖,那么必定有一个同学的被另一个同学的替换掉,这时候就需要版本控制工具,来将两个人修改的结合起来)

  • 版本控制工具

    • 集中式版本控制工具

      CVS、SVN(Subversion)、VSS…

      都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们通过客户端连接到这台服务器,取出最新的文件或者提交更新。

      • 好处:每个人都可以在一定程度上看到项目中其他人正在做什么,管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易

      • 坏处:中央服务器的单点故障。如果服务器一小时不能工作,那么这一个小时内,谁都无法提交更新,也就无法协同工作.

    • 分布式版本控制工具

      Git、Mercurial、Bazaar、Darcs…

      每台客户端就是一个代码库,每个人在自己的本地计算机上做版本控制,在写代码之前,要把远程库上的代码克隆下来到自己的本地库,然后基于自己的本地库做版本控制,在自己的电脑上写好后,再推送到远程库,就算远程库没了,也可以再自己电脑上做版本控制。

      优点:每个人手上都有一份完整的,包含历史记录的代码

  • Git工作机制

    工作区(代码存放的本地目录) ——【通过git add命令添加到暂存区】—— 暂存区(在工作区写代码后,添加到暂存区,暂存区的代码是可以删除修改的) ——【通过git commit命令提交到本地库,本地库的代码是不能删除修改的】—— 本地库 ——【通过git push命令推送到远程库】——远程库

    在这里插入图片描述

  • Git和代码托管中心

    代码托管中心是基于网络服务器的远程代码仓库

    • 局域网
      • GitLab
    • 互联网
      • GitHub(外网)
      • Gitee码云(国内网站)

Git安装 基于官网发布的最新版本2.32.0.2 安装

Git官网:Git (git-scm.com),可以在搜索引擎直接搜,通常第一个就是Git

下载安装步骤:

  • 进入官网后,点击右边的小电脑上面的Download for Windows,电脑就能自动下载Git

  • 下载完成后打开Git安装文件

  • 协议界面直接下一步

  • 选择好安装目录后下一步

  • Select Components选项内容勾选(使用认的就行,然后直接下一步):

    -Additional icons    //创建快捷方式
    --On the Desktop    //桌面上
    -Windows Explorer integration //右键菜单    ✔
    --Git Bash Here    //Git的命令行客户端    ✔
    --Git GUI Here    //Git的GUI客户端(图形化界面)    ✔
    -Git LFS (Large File Support)    //大文件支持    ✔
    -Associate .git* configuration files with the default text editor    //配置认编辑器    ✔
    -Associate .sh files to be run with Bash    //关联.sh格式文件    ✔
    -Check daily for Git for Windows updates    //每天检查Git是否使用Windows更新
    -(NEW!)Add a Git Bash Profile to Windows Terminal    //(新!)将 Git Bash 配置文件添加到窗口终端
    
  • Select Start Menu Folder选择开始菜单的位置,下一步

  • Choosing the default editor used by Git选择认编辑器,根据自己的情况而定 下一步(视频里用的Vim,也可以用自己熟悉的编辑器)

  • Adjusting the name of the initial branch in new repositories是否要修改初始化分支的名字 认让Git决定就行 下一步

    -Let Git decide    //让Git决定,以后无论创建哪个库,都是用master作为名字(认)
    
    -Override the default branch name for new repositories   //自定义初始化分支名字
    
  • Adjusting your PATH environment是否要修改环境变量 根据自己的情况而定 下一步

    -Use Git from Git Bash only    //只在Git Bash客户端里面使用Git(不会修改环境变量)(认)
    -Git from the command line and also from 3rd-party software    //可以在Git Bash里面使用Git,也可以在第三方软件的控制台等里面使用Git 
    -Use Git and optional Unix tools from the command Prompt    //会修改掉一些Windows工具(一般不选这个)
    
  • Choosing HTTPS transport backend选择后台客户端连接协议,认OpenSSL就行了 下一步

    -Use the OpenSSL library    //使用OpenSSL协议进行连接
    -Use the native Windows Secure Channel library 
    
  • Configuring the line ending conversion配置行末换行符 认选第一个就行 下一步

    -Check Windows-style ,cimmit Unix-style line endings    //自动选择样式
    -Checkout as-is ,commit Unix-style line endings
    -Checkout as-is ,commit as-is
    
  • Configuring the terminal emulator to use with Git Bash配置Git Bash终端类型 认选第一个就行 下一步

    -Use MinTTY(the default terminal of MSYS2)
    -Use Windows' default console window    //这个需要用dos命令
    
  • **Choose the default behavior of git pull**选择认的从远程库拉取代码到本地库的行为 认就行 下一步

    -Default(fast-forward or merge)
    -Rebase
    -Only ever fast-forward
    
  • Choose a credential helper凭据管理器 选第一个 下一步

    -Git Credential Manager Core    //选择跨平台的凭据管理器
    -Git Credential Manager    //选择windows的凭据管理器
    -None
    
  • Configuring extra options其他配置

    -Enable file system caching    //使用文件缓存机制,认勾选
    -Enable symbolic links    //使用符号连接,勾选
    
  • Configuring experimental options 实验室功能 视频中不勾选 然后安装

    -Enable experimental support for pseudo consoles    //允许在Git Bash里面运行第三方程序
    -Enable experimental built-in file system monitor    //启用实验内置文件系统监视器  (自动允许内置文件系统监视器,以加快包含许多文件的工作树中的常见操作,如`git status` ,`git add`,`git commit`等   这个视频中的Git版本没有,应该可以勾选
    
  • 然后就安装完成了,安装完成后在桌面右击可以看到Git的快捷菜单

Git命令 基于开发案例 详细了解git的常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件添加到暂存区
git rm --cached 文件删除暂存区文件
git commit -m “日志信息” 文件提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

设置用户签名

  • 鼠标右击Git Bush Here

  • 输入下面的命令并回车(用户名和邮箱输入自己定的用户名和邮箱)

    git config --global user.name 【这里写用户名】
    
    git config --global user.email 【这里写邮箱】
    
  • 完成后可在用户C盘的用户目录下找到.gitconfig 里面存有自己的用户签名

说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的.Git首次安装必须设置一下用户签名,否则无法提交代码

注意:这里的用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系

初始化本地库

  • 在需要创建本地库的目录里右击打开Git Bush Here
  • 输入命令git init然后回车
  • 然后就能在目录下看到.git目录了,没有显示的可以点击菜单栏的 查看 —— 隐藏的项目

查看本地库状态

初始化好的本地库,就可以查看本地库的状态了,使用命令git status 就可以查看了

什么项目都没有创建的情况下 会显示

On branch master
No commit yet
nothing to commit (create/copy files and use "git add" to track)

可以创建一个文件在里面

然后再用git status

这时候会显示(发现一个未被追踪过的文件,需要用git add命令添加暂存区)

On branch master
No commit yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.txt

nothing added to commit but untracked files present (use "git add" to track)

添加暂存区

输入命令git add 【这里输入文件名】 我的是git add hello.txt,就把文件存到暂存区

warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory

git rm --cached 【文件名】可以删除暂存区的内容,git rm --cached hello.txt

删除后可以再用git add 【文件名】 添加到暂存区

提交本地库

使用命令git commit -m "日志信息" 文件将暂存区的文件提交到本地库,形成自己电脑上的历史版本

git commit -m “first commit” hello.txt

执行后再允许 git status 会显示

On branch master
nothing to commit, working tree clean

可以通过 git reflog查看历史记录,输入后会显示

c5b235a (HEAD -> master) HEAD@{0}: commit (initial): first commit
//其中的前7位是缩减版的版本号,是版本号的前七位
//(HEAD -> master)代表指针指向当前版本

可以通过git log 查看版本的详细信息,输入后会显示

commit c5b235add282638e3f41d30ed3ebc2bb7a676f6e (HEAD -> master)  //版本号
Author: zqq <991521874@qq.com>
Date:   Mon Jul 19 16:29:03 2021 +0800

    first commit

修改文件

修改自己的文件修改完保存,然后输入命令git status,会显示

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")
//检测到文件修改了,需要重新添加暂存区,提交本地库

使用git add hello.txtgit commit -m "second commit" hello.txt之后 显示如下

warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master 622bb3c] second commit
 1 file changed, 1 insertion(+), 1 deletion(-)

此时输入git log 就可以查看历史版本的详细信息,如下

commit 622bb3c70c8270ff345b61856c77787e8c77d10e (HEAD -> master)
Author: zqq <991521874@qq.com>
Date:   Mon Jul 19 16:41:51 2021 +0800

    second commit

commit c5b235add282638e3f41d30ed3ebc2bb7a676f6e
Author: zqq <991521874@qq.com>
Date:   Mon Jul 19 16:29:03 2021 +0800

    first commit

版本穿梭

使用 git reset --hard 【版本号(前七位就行)】

先使用git reflog查看版本信息,显示

622bb3c (HEAD -> master) HEAD@{0}: commit: second commit    //此时指向的是第二个版本
c5b235a HEAD@{1}: commit (initial): first commit

然后使用git reset --hard c5b235a,此时指向第一个版本,此时会发现目录下文件内容也变成了第一个版本的内容,用git reflog命令显示如下

c5b235a (HEAD -> master) HEAD@{0}: reset: moving to c5b235a
622bb3c HEAD@{1}: commit: second commit
c5b235a (HEAD -> master) HEAD@{2}: commit (initial): first commit    //此时指向的是第一个版本

能从第二个版本切到第一个版本,同时也可以再切回第二个版本,切完以后会改变提交的文件内容

Git分支操作 分支特性 分支创建 分支转换 分支合并 代码合并冲突解决

什么是分支

在版本控制过程中,同时推进多个任务,可以为每个任务创建单独的分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,(情景:可以想象成副本,主分支的已经上线使用,然后需要加入新的功能的时候,把主分支的内容拷贝下来,作为一个分支,新的内容在这个分支上开发完以后,再将新分支合并到主分支)

分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上
  • 查看分支

    命令 git branch -v 可以查看分支,结果如下

    master c5b235a first commit
    
  • 创建分支

    命令git branch 【分支名】可以创建分支,git branch hot-fixgit branch -v结果如下

      hot-fix c5b235a first commit
    * master  c5b235a first commit
    
  • 切换分支

    git后面还是master,说明当前还是master分支

    使用git checkout 【分支名】 可以切换分支 先 git checkout hot-fix 然后git branch -v,可以看到切换到了 hot-fix 分支

    * hot-fix c5b235a first commit
      master  c5b235a first commit
    
  • 修改分支

    切换完分支以后,就可以修改工作区的内容(.git文件所在目录下)

    修改完以后,需要git add 【文件名】 git commit -m "【版本信息】" 【文件名】

    我这边是 git add hello.txt git commit -m "hot-fix first commit" hello.txt

    然后git reflog, 可以看到指向了hot-fix分支

    a6f5eea (HEAD -> hot-fix) HEAD@{0}: commit: hot-fix first commit
    c5b235a (master) HEAD@{1}: checkout: moving from master to hot-fix
    c5b235a (master) HEAD@{2}: reset: moving to c5b235a
    622bb3c HEAD@{3}: commit: second commit
    c5b235a (master) HEAD@{4}: commit (initial): first commit
    
  • 合并分支

    想把hot-fix 合并到master分支,需要先切换到master分支,然后再master分支下执行命令git merge hot-fix,就可以把hot-fix 合并到master分支下

    我这边是git checkout master 切换完以后发现.git目录所在目录的hello.txt文件内容又变成了之前master的内容,然后git merge hot-fix,此时发现分支合并了,hello.txt文件内容变成了hot-fix的内容

  • 产生冲突

    合并分支时,两个分支在同一个文件的同一位置有两套完全不同的修改。Git无法替我们决定使用哪一个,必须人为决定新代码内容

    修改master分支文件内容

    git add hello.txtgit commit -m "master test" hello.txt

    修改hot-fix分支文件内容

    git checkout hot-fixgit add hello.txtgit commit -m "master test" hello.txt

    此时执行 git checkout master切换master,然后合并 git merge hot-fix,会显示如下内容

    Auto-merging hello.txt
    CONFLICT (content): Merge conflict in hello.txt
    Automatic merge Failed; fix conflicts and then commit the result.
    

    此时执行命令git status,会提示两个文件修改了,就需要手动合并代码

    On branch master
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
            both modified:   hello.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
  • 解决冲突

    出现冲突合并失败后,打开hello.txt文件,会再文件标记出来,手动将文件中的内容合并,然后删除下面的合并提示```<<<<<<< HEAD``及其后面的内容都是合并提示修改完以后保存,然后添加到暂存区,提交到本地库,(master|MERGING)状态下,提交时不用写文件名,实现手动合并

    git add hello.txt 添加到暂存区 git commit -m "merge test"

    然后就手动合并成功了

Git团队协作机制

团队内协作

团队中甲本地库写好了基础代码以后,用push命令推送 到远程库

团队中乙拥有甲授予的权限,乙从远程库clone代码下来进行拓展修改,完成后push到远程库

甲再从远程库中用pull命令拉取远程库中修改过的代码,这样就实现了团队代码的同步

跨团队协作

A团队中的代码遇到解决不了的问题,请求B团队帮忙

B团队的

人通过fork命令作为分支,将A团队的远程库代码复制过来,作为自己的远程库

B团队从自己的远程库clone下来,然后再自己本地库进行修改,完成后push到自己的远程库

B团队完成后,需要pull request向A团队发送一个请求,然后A团队审核

A团队审核后,使用merge将代码合并过来,然后用拉取到本地库,实现跨团队协作

GitHub

GitHub官网https://github.com

创建远程库

  • 1.登录GitHub后,点击网页右上角的+号,选择 new Repository(新建存储库)

  • 2.远程库的名字和本地库的名字最好相同,(本地库的名字指.git文件夹所在的文件夹名)

    输入好远程库名称后,会自动检测是否可用

  • 3.公有库私有库的选项,因为是测试,认用公有库就行

  • 4.直接点最下方的Create repository,就创建好了一个远程库

  • 5.此时会弹出一个页面,可以选择远程库的链接,有两种不同协议的链接 HTTPS 和 SSH

    我们先用HTTPS的链接,可以直接点后面的按钮复制链接

    https://github.com/zqq2017123491/git-demo.git

    • 查看远程库链接别名的命令git remote -v,此时是没有别名的

    • 创建远程库链接别名的命令

      git remote add git-demo https://github.com/zqq2017123491/git-demo.git

      此时查看别名,结果如下:(出现两个别名,说明这个别名既可以拉取,也可以推送)

      git-demo       https://github.com/zqq2017123491/git-demo.git (fetch)
      git-demo       https://github.com/zqq2017123491/git-demo.git (push)
      

代码推送 Push

​ 基本语法git push 别名 分支

​ 比如我把master分支推送,那就git push git-demo master

​ 执行后会弹窗让我们登录,可以用浏览器的账号登录登录后会提示我们认证

​ 绑定后会提示Authentication Succeeded,认证成功,Git Bash会显示如下

Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 8 threads
Compressing objects: 100% (16/16), done.
Writing objects: 100% (24/24), 1.84 KiB | 471.00 KiB/s, done.
Total 24 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/zqq2017123491/git-demo.git
 * [new branch]      master -> master

​ 然后就可以在github的库里看到自己推送的文件

代码拉取 Pull

在github上可以直接点文件右上角的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐