• 安装Git和git命令使用


    安装Git

    在Windows上安装Git
    在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
    安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
    在这里插入图片描述
    安装完成后,还需要最后一步设置,在命令行输入:

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    
    • 1
    • 2

    可以再输入$ git config user.name然后回车,如果设置成功了就会显示你刚刚设置的用户名,同理,可以用$ git config user.email来查看你设置的邮箱

    创建版本库

    版本库又名仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    首先,选择一个合适的地方,创建一个空目录:

    $ mkdir learngit
    $ cd learngit
    $ pwd
    
    • 1
    • 2
    • 3

    在这里插入图片描述第二步,通过git init命令把这个目录变成Git可以管理的仓库:

    $ git init
    
    • 1

    在这里插入图片描述
    当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。(如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见)

    把文件添加到版本库
    windows注意
    千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。

    现在我们编写一个HelloWorld.txt文件,内容如下:Hello World
    一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

    第一步,用命令git add告诉Git,把文件添加到仓库:

    $ git add HelloWorld.txt
    
    • 1

    在这里插入图片描述

    第二步,用命令git commit告诉Git,把文件提交到仓库:

    $ git commit -m "this is a .txt file"
    
    • 1

    -m后面输入的是本次提交的说明
    在这里插入图片描述
    执行成功后,1 file changed:1个文件被改动(我们新添加的HelloWorld.txt文件);1 insertions:插入了1行内容(HelloWorld.txt有两行内容)。

    为什么Git添加文件需要两步呢?
    因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

    版本回退

    修改HelloWorld.txt文件如下:
    Hello World
    Hello ZhangSan

    然后尝试提交:

    $ git add HelloWorld.txt
    $ git commit -m "append ZhangSan"
    
    • 1
    • 2

    在这里插入图片描述
    用git log命令查看:

    $ git log
    
    • 1

    在这里插入图片描述
    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:

    $ git log --pretty=oneline
    
    • 1

    在这里插入图片描述

    现在我们准备把readme.txt回退到上一个版本
    首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交。
    上一个版本就是HEAD^
    上上一个版本就是HEAD^^
    当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

    现在,我们要把当前版本append zhangsan回退到上一个版本,就可以使用git reset命令:

    $ git reset --hard HEAD^
    
    • 1

    在这里插入图片描述
    使用cat查看内容

    $ cat HelloWorld.txt
    
    • 1

    在这里插入图片描述
    用git log再看看现在版本库的状态:

    $ git log
    
    • 1

    在这里插入图片描述
    最新的那个版本append ZhangSan已经看不到了。
    想要回答最新的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append ZhangSan的commit id是c674ddd,于是就可以指定回到未来的某个版本:
    $ git reset --hard c674ddd
    在这里插入图片描述
    此外Git提供了一个命令git reflog用来记录你的每一次命令:

    $ git reflog
    
    • 1

    在这里插入图片描述
    可以看到commit id

    Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

    工作区和暂存区

    工作区(Working Directory)
    就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。
    版本库(Repository)
    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
    在这里插入图片描述
    我们再练习一遍,先对HelloWorld.txt做个修改:
    Hello World
    Hello ZhangSan
    chat GPT
    然后,在工作区新增一个LICENSE文本文件。
    先用git status查看一下状态:

    $ git status
    
    • 1

    在这里插入图片描述
    Git非常清楚地告诉我们,HelloWorld.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

    现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:

    $ git status
    
    • 1

    在这里插入图片描述
    git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

    $ git commit -m "understand how stage works"
    
    • 1

    在这里插入图片描述
    一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:

    $ git status
    
    • 1

    在这里插入图片描述

    管理修改

    为什么Git比其他版本控制系统设计得优秀?
    因为Git跟踪并管理的是修改,而非文件。

    第一步,对HelloWorld.txt做一个修改,比如加一行内容:
    Hello World
    Hello ZhangSan
    chat GPT
    Gpt is Generative Pre-Trained Transformer

    然后,添加:

    $ git add HelloWorld.txt
    $ git status
    
    • 1
    • 2

    再修改HelloWorld.txt:
    Hello World
    Hello ZhangSan
    chat GPT
    Gpt is Generative Pre-Trained Transformer,The AI big model is more like the human brain.

    提交:

    $ git commit -m "GPT Readme"
    
    • 1

    在这里插入图片描述

    再看看状态:

    $ git status
    
    • 1

    在这里插入图片描述
    怎么第二次的修改没有被提交?
    第一次修改 -> git add -> 第二次修改 -> git commit
    当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

    提交后,用git diff HEAD – HelloWorld.txt命令可以查看工作区和版本库里面最新版本的区别:

    $ git diff HEAD -- HelloWorld.txt 
    
    • 1

    在这里插入图片描述
    注意:+后面是版本库缺少的。

    撤销修改

    git checkout – file可以丢弃工作区的修改:

    $ git checkout -- HelloWorld.txt
    
    • 1

    在这里插入图片描述
    git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令。

    如果已经git add到暂存区了,在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交:
    在这里插入图片描述
    用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区:

    $ git reset HEAD HelloWorld.txt
    
    • 1

    在这里插入图片描述
    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
    再用git status查看一下,现在暂存区是干净的,工作区有修改:
    在这里插入图片描述

    ####### 删除文件
    先添加一个新文件test.txt到Git并且提交:
    在这里插入图片描述
    如果你直接用rm命令删了:

    $ rm test.txt
    
    • 1

    这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

    $ git status
    
    • 1

    在这里插入图片描述

    要确实从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

    $ git rm test.txt
    $ git commit -m "remove test.txt"
    
    • 1
    • 2

    现在,文件就从版本库中被删除了。在这里插入图片描述
    小结:
    git rm test.txt 相当于是删除工作目录中的test.txt文件,并把此次删除操作提交到了暂存区。
    使用git checkout – test.txt相当于是让工作目录test.txt恢复到暂存区中test.txt的状态,但是工作目录中test.txt已经被删除,无法找到文件来再次删除所以报错,必须先使用git reset head test.txt在暂存区中将删除操作丢弃,然后在git checkout – test.txt就是直接将工作目录中test.txt恢复到版本库中的状态。

  • 相关阅读:
    网络安全课题以及学术方向总结
    【供应链】移动网络时代下的供应链
    接入网络技术
    PLC中ST编程的比较运算
    【JAVA毕业设计源码】基于微信小程序的批发零售业管理系统
    基于Laravel通用型内容建站企业官网系统源码 可免费商用
    JS判断浏览器类型
    协程 + epoll 的两个小例子
    【遥感卫星数据】Landsat数据Collection1和Collection2区别
    【大前端攻城狮之路】百度爱番番前端性能监控体系方案设计
  • 原文地址:https://blog.csdn.net/m0_61689418/article/details/133944204