• 尚硅谷Git笔记


    背景

    Git版本:2.31.1
    视频地址:https://www.bilibili.com/video/BV1vy4y1s7k6
    
    • 1
    • 2

    Git命令

    基本命令

    git config

    设置用户签名(--global 可以去掉,去掉的话配置就不是全局的)
    git config --global user.name 用户名
    git config --global user.email 邮箱 
    
    windows设置完上面的内容,去C盘的与当前windows用户名同名目录下,会有.gitconfig文件,文件内容就是设置的全局用户名、邮箱
    
    • 1
    • 2
    • 3
    • 4
    • 5

    git init

    初始化git,生成隐藏的 .git 目录

    Linux 命令 ll -a 能显示隐藏文件

    git status

    查看 git 状态

    在 git init结果:
    On branch master  # 当前分支
    
    No commits yet  # 当前内容还没有提交
    
    nothing to commit (create/copy files and use "git add" to track)  # 有哪些东西可以commit
    # 红色的文件表示没有被添加进暂存区,绿色的文件表示已添加
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这时候添加一个文件

    git add xx

    将xx目录、文件添加进暂存区

    “git add .” :将此目录下的所有文件都添加到暂存区

    git rm --cached xx

    将xx目录、文件从暂存区删掉

    用于从暂存区中删掉 git add 命令添加进的目录、文件

    这个删除只是从git暂存区中删掉,目录、文件的物理实体依旧存在

    git commit -m “备注” xx

    将xx目录、文件提交到本地库

    如果没有给出xx,默认就提交add进暂存区的内容

    git reflog

    查看引用日志信息,可以看版本信息(精简的版本号,提交备注)

    git log

    查看更详细的日志信息(完整版本号,提交人,提交时间,提交备注)

    git reset --hard 版本号

    版本穿梭,到版本号指定的那个版本

    版本号就是 git reflog、git log 显示内容中的那串码

    用于在同一个分支中切换到不同提交的版本

    当合并冲突时,当前分支会变为merging状态,取消merging状态命令 git reset --hard head,这里的head不是版本号,就是head

    版本控制

    git branch

    显示所有分支,当前所在分支前会有星号*

    git branch 分支名

    创建分支,默认会以当前分支为基础创建,也就是新分支的内容就是当前分支的现有内容

    git branch -v

    查看当前分支

    git checkout 分支名

    切换分支

    git merge 分支名

    把指定的分支合并到当前分支上

    远程库操作

    git remote -v

    查看当前所有远程地址别名

    git remote add 别名 远程地址

    给“远程地址”起“别名”,别名一般都会是 origin
    创建别名后 git remote -v 查看会看到两个,一个用来 fetch 拉取,一个用来 push 推送
    注意“远程地址”是github或gitee或gitlab提供的http或https开头的,不是ssh的
    
    • 1
    • 2
    • 3

    git push 别名 分支

    推送本地分支上的内容到远程仓库

    git clone 远程地址

    将远程仓库的内容克隆到本地

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

    将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

    其他

    指针

    HEAD -> 分支名 -> commit提交版本
    
    我们所说的指针都是指向具体版本记录的指针,当前是哪个分支是由HEAD指针决定的,HEAD指向哪个分支指针,我们就在哪个分支上
    所以创建分支的本质就是多创建一个指针;切换分支就是把HEAD指向另一个版本指针
    
    • 1
    • 2
    • 3
    • 4

    冲突

    冲突原因

    两个分支在同一个文件的同一个位置有两套完全不同的修改,合并的时候Git无法替我们决定使用哪一个,就产生了冲突
    
    • 1

    冲突合并

    在有冲突的时候合并,会提示错误并且当前分支会变为merging状态
    
    • 1

    撤销冲突状态

    当合并冲突时,当前分支会变保持为merging状态
    撤销merging状态命令 git reset --hard head,这里的head不是版本号,就是head
    
    • 1
    • 2

    查看冲突内容

    在分支是merging状态时,打开提示有冲突的文件,会发现这样的内容:

    <<<<<<< HEAD
    当前分支下的内容
    =======
    要与当前分支合并的另一分支下的内容
    >>>>>>> 另一分支的名字  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    解决冲突

    1. 首先要解决冲突的文件内容
    编辑提示有冲突的文件内容,将冲突的部分手动解决,保存退出
    
    • 1
    1. 添加文件到暂存区
    git add 目录或文件名
    
    • 1
    1. 最后提交本地库
    git commit -m "备注"
    注意,这条命令不能在最后带有“目录或文件名”
    
    • 1
    • 2

    将所有冲突的内容提交本地库后,就会发现分支的merging状态消失了

    本地第一次推送到远程库

    背景

    本地创建的项目,想推送到自己的远程库
    远程库没有对应项目,需要新建
    
    • 1
    • 2

    操作

    远程:
        新建仓库
        复制仓库地址(http或https开头的,非ssh)
    本地:(在项目目录下用git bash操作,默认本地分支是master)
        git init
        git status (非必须,这里就是为了看下git状态)
        git add .
        git branch (非必须,看git分支)
        git commit -m '注释'
        git remote add  远程仓库别名(一般是origin)   远程仓库地址
        git remote -v (非必须,看远程分支)
        git push origin master -f (强制推送,本地会全部覆盖远程,这里只针对远程仓库为空的情况)
    
    如果远程也有内容,即不可以强制push以本地覆盖远程,可参考下面的(本人没试过,不知道效果)
        git branch  本地新分支名
        // 这中间是不是要加一个切换到新分支的过程? “git checkout 本地新分支名”
        git push  远程仓库名  远程分支名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    远程库同步.ignore

    背景

    远程的有些文件或目录想忽略掉,但一开始上传时这些内容都上传到仓库了,现在想根据新的 .ignore 文件 “刷新” 一下远程库,将已经上传的文件从远程库删掉
    
    • 1

    操作

    本地:
        配置 .ignore 文件
        git rm -r --cached .
        git add .
        git commit -m '注释'
        git push 远程仓库别名  远程分支名
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    HTTP协议
    1.7 C++基础知识_运算符重载_类外函数
    记录一下:基于nginx配置的封禁真实IP
    nginx-1.24.0 安装教程
    【Java+SpringBoot】监考任务分配系统(源码+远程部署+项目定制开发+代码讲解+毕业设计+答辩教学)
    浅谈vue2.0和vue3.0的区别
    强化学习和推荐系统的结合应用
    [杂记]C++中移动语义与完美转发的一些理解
    【vue2高德地图api】高德地图forEach批量添加marker点标记,点击获取item对象『全网最详细』【翻遍csdn总结】
    【JavaSe笔记】——final关键字,常量,抽象类的定义使用和特征
  • 原文地址:https://blog.csdn.net/Louzen/article/details/126106910