安装Git和git命令使用

news/2024/5/17 15:35:15 标签: git, github, gitee, linux, 版本控制, 分布式, 服务器

文章目录

  • 安装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"

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

创建版本库

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

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

$ mkdir learngit
$ cd learngit
$ pwd

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

$ git init

在这里插入图片描述
当前目录下多了一个.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

在这里插入图片描述

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

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

-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"

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

$ git log

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

$ git log --pretty=oneline

在这里插入图片描述

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

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

$ git reset --hard HEAD^

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

$ cat HelloWorld.txt

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

$ git log

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

$ git reflog

在这里插入图片描述
可以看到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

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

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

$ git status

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

$ git commit -m "understand how stage works"

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

$ git status

在这里插入图片描述

管理修改

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

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

然后,添加:

$ git add HelloWorld.txt
$ git status

再修改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"

在这里插入图片描述

再看看状态:

$ git status

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

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

$ git diff HEAD -- HelloWorld.txt 

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

撤销修改

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

$ git checkout -- HelloWorld.txt

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

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

$ git reset HEAD HelloWorld.txt

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

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

$ rm test.txt

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

$ git status

在这里插入图片描述

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

$ git rm test.txt
$ git commit -m "remove test.txt"

现在,文件就从版本库中被删除了。在这里插入图片描述
小结:
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恢复到版本库中的状态。


http://www.niftyadmin.cn/n/5109509.html

相关文章

免费高清壁纸下载(静态和动态壁纸)

一、网址下载(静态壁纸) 高清图片直接另存为就可以了。然后在电脑空白处右键——个性化设置即可替换壁纸。 ①网址:https://www.hippopx.com ②极简壁纸:https://bz.zzzmh.cn/index ③彼岸图网:http://pic.netbian…

写一个简单的解释器(1) 编译过程简介

编译过程 一般来说,将一份源代码编译为可执行文件包含下面的关键步骤: 源文件 ⇒ 构建标记流 ⇒ 构建编译树 ⇒ 生成可执行文件 \texttt{源文件}\Rightarrow \texttt{构建标记流}\Rightarrow \texttt{构建编译树}\Rightarrow\texttt{生成可执行文件} 源…

论文阅读 - Coordinated Behavior on Social Media in 2019 UK General Election

论文链接: https://arxiv.org/abs/2008.08370 目录 摘要: Introduction Contributions Related Work Dataset Method Overview Surfacing Coordination in 2019 UK GE Analysis of Coordinated Behaviors 摘要: 协调的在线行为是信息…

Node-创建Web应用

题记 node创建web应用,以下是所有流程和代码 与php比较:使用 PHP 来编写后端的代码,需要 Apache 或者 Nginx 的 HTTP 服务器,并配上 mod_php5 模块和 php-cgi。 Node应用的组成 node应用由三部分组成: require 指令&a…

TikTok Shop印尼站关停,跨境卖家该如何自救

10.4日,TikTok Shop宣布关停印尼站,无疑是一个巨大的炸弹投在整个跨境圈,让许多跨境卖家以及当地本土的卖家、品牌措手不及。 这对TikTok的东南亚市场而言,无疑是一次沉重的打击。 TikTok在东南亚的商业布局,印尼是其…

虚拟机与主机(win10之间的通信)

(201条消息) Ubuntu虚拟机不显示ip地址【已解决】_ubuntu没有ip_不爱赖床的懒虫的博客-CSDN博客 sudo /sbin/dhclient VMTool安装与卸载 (201条消息) ubuntu中vmtools的安装与彻底卸载_卸载vmtools_林麦安的博客-CSDN博客 (202条消息) 解决虚拟机安装 VMware Tools 灰色无法…

Windows11系统安装WSL教程

WSL,全称Windows Subsystem for Linux,是微软官方提供的可以在Windows上直接运行的Linux环境,包括大多数命令行工具、程序和应用,由系统底层虚拟机平台支持。 开启相关服务 1、控制面板-启用或关闭Windows功能 2、勾选以下两个…

【ChatGLM2-6B】nginx转发配置

背景 好不容易把ChatGLM2-6B大语言模型部署好了,使用streamlit方式启动起来了,终于可以愉快的玩耍了,然后想着申请一个域名,使用HTTPS协议访问,但实践过程中,发现这个大语言模型的nginx转发配置还是有点小…