Git相关操作(没写完~~~)

本文介绍了Git的基本配置,包括全局和局部用户的设置,以及git仓库的初始化。详细讲解了工作区、暂存区和版本库的概念,强调了git与github的区别。此外,还涵盖了git的add、commit、log、reset等常用命令,以及分支管理和远程仓库的交互,如push和pull操作。
摘要由CSDN通过智能技术生成

来源

  • 本文主要是对照y总的教程写的一下小笔记
  • 这里找到了一个很好地练习网站

git基本概念及操作

  • 配置用户

    git操作之前,我们首先需要对本地的信息初始化
    具体有什么用忘记了,只是记得提交的时候好像有个全局用户,局部用户,但是不重要,之后在研究
    目前都用全局就ok

        git config --global user.name zzg
        git config --global user.email zzg645453374@163.com
    
    • 有时候需要用到单独仓库单独的用户,即局部用户配置
        git config user.name TName
        git config user.email asd@gmail.com
    
  • 初始化之后可以进行查看,linux下是用户根目录.gitconfig文件中

git仓库

初始化仓库

md
用户搞完之后,就需要真正进行git操作了,首先我们需要有这么一个git仓库
进入本地的某个文件夹,git init指令会将该文件夹初始化为一个git仓库

  • 这里有一点需要清楚,git和github不是一个概念。真正要用到的其实是git,而github作为远程的版本库,而且使用的人比较多,和git是两个概念
  • 此时就要说一下版本库的问题了

git中的区域概念

md
git中的抽象区域可以分为3部分,分别是工作区,版本库,暂存区(印象中是4部分,但是y总说3部分,可能是之前记错了?)

  1. 工作区:进行操作的地方,通俗讲就是你git init的那个文件夹

    就是你的所有操作都会在工作区内,不管是分支如何改变,所有的分支所有的节点都只有一个工作区,并不是每一个节点一个工作区

  2. 版本库:commit之后存放的位置

    首先本地是具有一个版本库的,你的所有修改,版本更替节点回退等等操作都在版本库中有记录

    • 那么此时就需要再次与github进行区分
      github会远程存放你的版本库,但是与github进行交互用的是push和pull操作,某种意义上将,这两个操作与github没有关系
      这两个操作在git操作中属于与远程进行交互,而远程的仓库不仅有github着一个平台,包括国内的gitte等一种平台,只要是性质相同,都可以进行相同的操作
      在此github只是一个个例,一定记住github和git操作是独立的两码事
  3. 暂存区:add操作之后文件到达的地方

    在我的理解中,这个add操作有点像是copy一份,因为之后有一个操作叫做git diff,他会检测本地(工作区)与暂存区(add之后)同一个文件的改动

    • 比如我将readme.txt add到了暂存区,然后我对本地文件进行了修改,修改的是工作区的内容,而暂存区是之前提交的,所以add到暂存区应该是copy了一个备份

提交以及版本库相关操作

md
首先介绍一个git status操作,会显示当前仓库的状态,我感觉显示的就是工作区与暂存区的状态
如果修改之后没有add,则会显示红色,add之后会显示绿色
如果既有add又有未add的,好像是上下两种都列出来,但是同一个文件没试过,之后试一下

  1. 提交版本库commit

    git commit -m "modefy readme.txt"
    commit操作会将暂存区的改动提交给版本库,会永远留存(不手动删除版本的话应该是永久)

    • 这里再提一嘴,到目前为止均与远程github无关,区分清楚
    • commit 提交之后,该记录就会永远被记录
  2. 对版本库的一些简单操作

    1. git log

      会显示版本库从根节点到当前节点(当前版本)的路径,即这条线上的所有版本(从下往上显示)
      这里就会有一个HEAD指针的概念,就是所有的版本类似于一棵树状结构,而当前库是那个版本就看HEAD指针指向哪里
      但是一般人不做很复杂的项目,对HEAD指针操作可能比较少,像我就是用github作为远程同步备份,通常都是一条线走下去,就不怎么用到(从来没用过)HEAD的回退操作

      • git log显示的信息比较全,好像有一个git log --pretty=oneline(最后一个单词记不清了,大概就是这么条指令)会显示的简洁一点,显示的信息一个版本只有一行,但我觉得没啥用
    2. git reset --hard HEAD~ (最后有一个~)

      简单的版本回退操作,最后的小~可以用^(键盘6)代替,效果相同,有几个代表回退几个版本
      比如HEAD^^^,就是回退3个版本

    3. git reflog

      显示版本库的迭代过程,主要是清楚的列出每个版本都干了啥(包括版本回退操作也会有
      配合后续有个回退操作,reflog指令显示的内容在开头会有一串编号,其实是版本的哈希值的前几位(7位好像)

    4. git reset --hard b552acd

      将版本回退到某个时期,编号就是reflog显示的编号

  3. HEAD指针

    简单来说HEAD指针通常指向最近一次提交记录的节点,即当前在其基础上工作的提交记录

    • Git分离头指针

      通常来说HEAD指向的是Branch,也就是分支随着每次commit而不断更新版本库,但是这种更新都是会永久留存的
      比如我们有时候想对版本进行修改,但是不希望提交,比如Debug加断点输出,就可以分离HEAD

    • git checkout 58df8b3

      HEAD指针指向58df8b3所代表的记录,此时HEAD处于头指针分离的状态,在此基础上的commit等修改不会直接写入版本库
      编号有git log获得(哈希值的前7位)

    • git checkout -b NewBranch

      如果想保存分离状态下的修改,只需要在此处新建一个分支即可,那么修改就会写入到版本库

      • git branch NewBranch && git switch NewBranch || git checkout NewBranch 效果相同
    • git checkout main^

      切换HEAD指针到main^main^相当于main的父节点,几个^就是几层父节点】
      这种方法比直接输入哈希值方便

      • 这样会直接进入HEAD分离状态
      • 有时候会回退很多次,比如7次,就要^^^^^^^,为了方便,可以git checkout main~7
    • git branch -f main HEAD~3

      强制将main移动到HEAD的三级父亲
      HEAD~3也可以换成哈希值

      • 注意,此时HEAD不一定需要指向该分支,这个指令是全局操作的
    • 回退操作

      • git revert HEAD~

        将当前分支的撤销操作作为一次修改,生成一次新的提交

      • git reset HEAD~1

        将当前分支回退

      • 这里要注意一下两个参数的意思,是Destination的意思

        • git reset main^^ 把当前分支(比如asd)移动到main的两级父节点

        • git revert bugFix^^^bugFix三级父节点的那次提交撤销掉,并把该操作作为新提交

          revert的可能有点绕,我们假设在a位置新建了a.txt,然后经过乱七八糟的操作到达了b节点,此时git revert a,就会在b的位置commit一下,commit的内容就是回退a操作,也就是回到了新建a.txt之前的状态)

git分支

分支概念

  • 分支相当于不同的前进方向

    比如我在当前位置,在某一个时刻新建了new_branch
    然后在main中提交了几次之后,想要在new_branch的位置进行另一个方向的开发,就可以切换到该分支,然后继续commmit
    新分支commit之后,与main的分支属于两条不同的分支,类似于树状结构,两条分支都可以永久保存

分支操作

  1. git branch branch_name

    在当前位置新建Branch

    • 注意,新建的branch不会直接出去一块,而是在原位置,相当于在该位置多了一个可以操作的指针,这个概念在HEAD头指针分离很重要
  2. git switch branch_name

    切换到branch_namebranch

    • git checkout branch_name也可以,相同的效果,不过checkout属于旧指令,一般都可以用

    在 Git 2.23 版本中,引入了一个名为 git switch 的新命令,最终会取代 git checkout,因为 checkout 作为单个命令有点超载(它承载了很多独立的功能)。

  3. git merge branch_name 【没看懂,不知道干啥的】

    假设当前有两个伸出来的分支,branch_namemain,当前位置在main,想将branch_name合并到main上,使用该指令

    • 注意,后面跟的参数是被合并的分支,合并到当前位置的分支
    • 合并操作是将两个分支的修改合并,如果冲突我也不知道会咋样、、、没实际用过这个指令
    • 合并后还会有个git merge main的操作,不知道干啥的
  4. git rebase main 【也没看懂是干啥的,两个合并操作都没看懂】

    • 注意,后面跟的参数是合并到,也就是当前分支合并到后面参数所代表的分支位置

远程

md
远程操作其实很多,但是普通常用的也就pushpullclone,就光介绍一下这几个吧

  1. git的概念里远程其实不等于在github上,远程只是独立于当前位置的一个概念

    【自己的理解,读不懂可以跳过,我自己也不知道理解的对不对】
    【其实我也没看懂远程是个啥】

远程之前的操作

  1. git config --global user.name "NCpaste"
  2. git config --global user.name NCpaste.zg@gmail.com

远程交互操作

Git&Github
心得

  1. git clone https://github.com/NCpaste/Tese
    • 载入远程仓库到本地
  2. git push
  3. git pull
  4. git fetch origin master
  5. git merge origin/master
  6. git remote
    远程仓库操作
    • git remote -v

2023/5/25 34

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值