当前位置:   article > 正文

[Git][基本操作]详细讲解

[Git][基本操作]详细讲解


1.创建本地仓库

  • 创建⼀个Git本地仓库git init
  • 运行该命令后,会在当前目录下多出一个.git的隐藏目录
  • .git目录是Git用来跟踪管理仓库的,不要手动修改这个目录里面的文件
    • 如果改乱了,该Git仓库就被破坏了

2.配置 Git

  • 安装Git后⾸先要做的事情是设置⽤⼾名称和Email地址
    • git config [--global] user.name "Your Name"
    • git config [--global] user.email "email@example.com"
    • --global是一个可选项,表⽰这台机器上所有的Git仓库都会使⽤这个配置
  • 查看配置git config -l
  • 删除对应的配置
    • git config [--global] --unset user.name
    • git config [--global] --unset user.email

3.添加文件

1.添加文件

  • 添加⼀个或多个⽂件到暂存区git add [file1] [file2] ...
  • 添加某个目录下的所有⽂件改动到暂存区git add [dir]
  • 添加当前⽬录下的所有⽂件改动到暂存区git add .

2.提交文件

  • 提交暂存区全部内容到本地仓库中git commit -m "message"
  • 提交暂存区的指定⽂件到仓库区git commit [file1] [file2] ... -m "message"
  • 注意git commit后⾯的-m选项,要跟上描述本次提交的message且不能省略
    • 该描述用来记录提交细节,是给人看的,所以要好好描述

3.其他 && 说明

  • 查看历史提交记录git log
    • 如果觉得信息太多,可以加上--pretty=oneline参数
  • 类似7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3,是每次提交的commit id(版本号)
    • 不是单纯的数字,而是由SHA1计算出来的十六进制数

4.删除文件

  • 方法一
    • 先在工作区中删除该文件rm file
    • 添加工作区中该文件的修改git add file
    • 提交修改git commit
  • 方法二
    • 直接删除并添加修改git rm file
      • 相当于将rm filegit add file合并为了一步
    • 提交修改git commit

5.跟踪修改文件

  • Git跟踪并管理的是修改,⽽⾮⽂件
  • 查看当前仓库的状态git status
    $ 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:   233.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 显⽰暂存区和⼯作区⽂件的差异git diff [file]
    $ git diff
    diff --git a/233.txt b/233.txt
    index 99a6aad..80c8ca9 100644
    --- a/233.txt
    +++ b/233.txt
    @@ -1 +1,2 @@
     SnowK
    +DieSnowK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 查看版本库和⼯作区⽂件的区别git diff HEAD -- [file]

6.版本回退

  • 版本回退git reset本质是将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定
  • 语法格式git reset [--soft | --mixed | --hard] [HEAD]
    • --mixed:将暂存区和版本库的内容回退到指定版本,工作区的内容不变
      • 默认选项,使用时可以不带此参数
    • --soft:将版本库的内容回退到指定版本,工作区和暂存区的内容不变
    • --hard:将工作区、暂存区、版本库的内容都回退到指定版本
      • 慎用,特别是当前工作区还有未提交的代码时
      • 因为工作区回滚,未提交的代码就再也找不回来了
  • [HEAD]说明:可直接写成commit id/SHA1,表⽰指定退回的版本
    • 也可以写成如下形式
      • HEAD表⽰当前版本
      • HEAD^上⼀个版本
      • HEAD^^上上⼀个版本
      • 以此类推…
    • 还可以使用~数字表示
      • HEAD~0表⽰当前版本
      • HEAD~1上⼀个版本
      • HEAD~2上上⼀个版本
  • 如果回退到一个版本后悔了,想再倒回去,该怎么办?
    • 可以继续使用git reset命令,直接使用之前拿到的git log中的commit id即可
  • 如果连git log中的commit id也找不到了,该怎么办?
    • 使用git reflog补救,该命令用来记录本地的每一次命令
    • git reflog拿到的是一个很简短的哈希值,但是凭借哈希值,也可以回退到特定版本
      • 该简短的哈希值是commit id的部分
      • :可以使用部分commit id来表示目标版本
    $ git reflog
    1320449 (HEAD -> master) HEAD@{0}: reset: moving to 13204498006394d6067fbc8b6046885c6e5e9649
    7a535a4 HEAD@{1}: reset: moving to HEAD^^
    1320449 (HEAD -> master) HEAD@{2}: commit: 233.txt add DieSnowK
    d74fd33 HEAD@{3}: commit: 666.txt
    7a535a4 HEAD@{4}: commit (initial): First Commit
    
    $ git reset --hard 7a535a4
    HEAD is now at 7a535a4 First Commit
    
    $ git log
    commit 7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 (HEAD -> master)
    Author: DieSnowK <1752351098@qq.com>
    Date:   Tue Jul 23 14:30:39 2024 +0800
    
    	First Commit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 但是如果由于长时间开发,导致commit id早就找不到了,此时再想回退倒该版本,貌似就不可能了:P
  • 说明:Git的版本回退速度⾮常快的原因
    • Git在内部有个指向当前分⽀(此处是master)的HEAD指针

      • refs/heads/master⽂件⾥保存当前master分⽀的最新commit id
    • 在回退版本的时候,Git仅仅是给refs/heads/master中存储了一个特定的commit id

      请添加图片描述


7.撤销修改

0.前言

  • 撤销修改一般会遇到三种情况
    • ⼯作区的代码,还没有add:只有工作区有当前代码
    • 已经add,但还未commit:只有工作区和暂存区有当前代码
    • 已经add,并且commit:工作区、暂存区、版本库都有当前代码
  • 首先要明确:撤销的目的,其实是为了不影响远端仓库的代码

1.未add

  • 手动撤销:大眼瞪小眼,一个个盯着对比,然后删除
    • 非常容易出错,及其不推荐
  • 让工作区回到该版本的最初状态git checkout -- [filename]
    • 注意--不能丢,丢了就是其他含义了

2.已add,未commit

  • 此时可以先git reset --mixed [HEAD],将暂存区的内容回退到指定的版本
    • 此处,可以将暂存区回退到该版本最初始的状态
  • 然后就与情况一相同了,相当于是未add的情况
    • 此时执行git checkout -- [filename]即可

3.已add,已commit

  • 前置条件commit后没有push到远端仓库
  • 直接回退到上一个版本即可git reset --hard HEAD^
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/940052
推荐阅读
  

闽ICP备14008679号