【git】零基础学习git(持续更新中)

news2024/11/27 10:27:29

文章目录

  • 前言
  • git安装
    • Linux
    • Windows
  • git配置
  • 创建版本库
  • 将文件添加到版本库
    • 一次添加一个文件
    • 一次添加多个文件
  • 查看git状态
  • 查看修改的差异
  • 查看历史记录
    • 当前版本
  • 回退
    • 回退到上一个版本
    • 回退到某个版本
      • 如果关闭当前窗口
      • 如果关闭了当前窗口
  • 工作区与版本库关系
  • 查看工作区和版本库里面最新版本的区别
  • 撤销修改
  • 删除版本库中的文件
  • 恢复误删文件
  • 远程仓库(以GitHub为例)
    • 创建并连接SSH Key
    • 连接远程仓库
    • 第一次将本地推送到远程库
    • 第二次以后推送
    • SSH警告
    • 查看远程库
    • 删除远程库
  • 一些常见问题
    • 推送的时候需要输入密码
    • 解答
  • 参考

前言

由于之前做项目的时候发现自己学过的git知识很多都忘记了,因为之前没有记录笔记,考虑到后面也会经常使用,所以闲来无事重新记录一下。

由于git的普遍性,所以不会讲git的作用,只是记录git相关命令的作用和使用。

git安装

Linux

Debian或Ubuntu Linux

sudo apt-get install git

如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:

./configmakesudo make install

Windows

下载地址

git配置

安装完成后需要进行配置

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

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

使用下面命令可以查看所有设置

git config --list

创建版本库

进入一个需要建立版本库的目录(即.git仓库)中,通过git init命令把这个目录变成Git可以管理的仓库:

将文件添加到版本库

一次添加一个文件

需要三个步骤,比如改动的文件是readme.txt

  1. 把文件添加到仓库 git add
git add readme.txt
  1. 把文件提交到仓库
git commit -m "wrote a readme file"

-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

一次添加多个文件

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

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

查看git状态

运行git status命令查看git状态:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

查看修改的差异

需要用git diff这个命令看看:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

查看历史记录

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

当前版本

在Git中,用HEAD表示当前版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

回退

回退到上一个版本

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

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

此时本地中的文件就还原到上一个版本了

回退到某个版本

如果关闭当前窗口

通过查看历史版本,输入id的前几位(只要不与别的版本重复的几位即可,一般用5位)

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

如果关闭了当前窗口

Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

此时再次执行git reset --hard 1094a即可

工作区与版本库关系

工作区(Working Directory):就是你在电脑里能看到的目录

版本库(Repository):工作区有一个隐藏目录.git

在这里插入图片描述

查看工作区和版本库里面最新版本的区别

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

撤销修改

1.没有git add时,用git checkout -- file,表示撤销file在工作区的所有修改,此时file为版本库一模一样的状态

2.已经git add时,先git reset HEAD <file>把暂存区的修改撤销掉回退到1. ,再按1.操作,

3.已经git commit并没有推送到远程时,用git reset --hard id回退版本

4.推送到远程库,GG?

删除版本库中的文件

先在工作区中删除文件,再使用git rm file删除版本库中的文件,并使用git commit提交修改

恢复误删文件

此时只能返回版本库中的文件,即最近的修改会丢失

$ git checkout -- test.txt

远程仓库(以GitHub为例)

创建并连接SSH Key

第1步:在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

在这里插入图片描述

点“Add Key”,你就应该看到已经添加的Key:
在这里插入图片描述

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。

连接远程仓库

在GitHub上创建好一个仓库后,在本地上连接远程仓库

$ git remote add origin git@github.com:michaelliao/learngit.git

请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。

第一次将本地推送到远程库

把当前分支master推送到远程。

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

这样我们就可以发现远程库和本地库同步了

第二次以后推送

后面进行推送的时候就不需要-u这个参数了。

$ git push origin master

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

SSH警告

当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了。

如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。

查看远程库

git remote -v查看远程库信息:

$ git remote -v
origin  git@github.com:michaelliao/learn-git.git (fetch)
origin  git@github.com:michaelliao/learn-git.git (push)

删除远程库

如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令。使用前,建议先用git remote -v查看远程库信息,比如删除origin

$ git remote rm origin

此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。

一些常见问题

推送的时候需要输入密码

$ git push -u origin main

fatal: 发送请求时出错。

fatal: 无法连接到远程服务器

fatal: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 140.82.113.3:443

这个问题怎么解决啊,我配置了github的hosts也能正常登录,但是就是没法推送远程库

解答

2021年8月开始改成只能由token登录了。ssh配置没用。
参考这篇博客吧:
以下是chatgpt的回答:

这个错误提示是因为在2021年8月13日,GitHub停止支持使用密码进行身份验证,这是为了提高安全性。相反,您需要使用访问令牌(access token)或SSH密钥进行身份验证。

要解决此问题,您可以按照以下步骤:

  1. 在GitHub上创建一个访问令牌。您可以在GitHub的设置页面中创建令牌。在页面的左侧菜单中选择“Developer Settings”,然后选择“Personal access tokens”。在此页面上,选择“Generate new token”按钮,然后按照页面中的说明进行操作。请确保仅授予令牌所需的最小权限。

  2. 用访问令牌替换密码。在您的本地存储库中,使用以下命令将远程URL更改为使用访问令牌进行身份验证:


git remote set-url origin https://@github.com/WeC9/my_first_reposity.git

请将<access-token>替换为您的访问令牌。

  1. 现在您可以尝试再次进行操作,Git应该会使用访问令牌进行身份验证,而不是使用密码。

如果您仍然遇到问题,可以尝试使用SSH密钥进行身份验证,或者查看GitHub文档以获取更多帮助。

参考

https://www.liaoxuefeng.com/wiki/896043488029600

git命令查询表:git-cheat-sheet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一下trackformer的安装过程

项目地址 1、创建python环境&#xff0c;并激活 conda create -n TF python3.8 -y conda activate TF2、进入trackformer中&#xff0c;并且运行setup.py cd Desktop/MOT/trackformer/ python setup.py install3、下载pytorch pytorch官方安装法 # CUDA 11.1 pip install …

虚拟机ip地址总是改变的完美解决

在连接虚拟机进行操作时&#xff0c;第一次成功连接到虚拟机&#xff0c;但是关闭虚拟机后&#xff0c;第二天发现怎么都连接不上该虚拟机了&#xff0c;结果查询虚拟机的ip地址发现ip地址发生了改变&#xff0c;那么怎么才能让虚拟机的ip地址固定不变呢&#xff1f; 具体操作…

【vue2+element ui】添加修改共用表单的下拉框回显问题分析以及解决方案(附共用表单代码)

目录 简介问题复原问题分析共用表单代码分享 简介 本人前端水平不佳&#xff0c;本文分享在编写个人项目前端代码的时候遇到的回显问题的解决办法&#xff0c;仅供参考。 问题复原 首先展示表单中的问题代码&#xff0c;本次前端的设计是添加和修改操作共用表单&#xff0c;…

物通博联5G+工业互联网解决方案助力打造5G智能工厂

面对来自成本和市场等压力挑战&#xff0c;工业企业正通过数字化升级提升效益降低成本&#xff0c;拓展发展空间。 随着科技的不断发展&#xff0c;5G技术已经成为了全球关注的焦点。5G技术的高速度、低延迟和大连接特性为各行各业带来了巨大的变革机遇。工业和信息化部有关负…

PYQT 读取摄像头显示视频(Qtimer的方式 )

建立界面 使用qtdesigner设计一个基本的播放视频界面 使用PYUIC生成对应代码文件&#xff0c;如下&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file Test_UI.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: An…

【iOS】多界面传值

文章目录 前言一、属性传值二、协议传值三、block传值四、KVO传值五、KVO的自动触发与手动触发六、通知传值总结 前言 在写网易云音乐以及3GShare包括后面的学生管理系统时&#xff0c;用到许多界面传值方法&#xff0c;特撰写博客记录目前学过的几种多界面传值方法 一、属性…

Zabbix-server监控mysql及httpd服务

目录 一、Zabbix监控mysql数据库 1、为server.Zabbix.com添加服务模板 2、创建mysql服务图形 二、server.zabbix.com服务器操作 编辑chk_mysql.sh脚本 三、server.Zabbix.com测试 四、查看web效果 五、Zabbix监控apache&#xff08;httpd服务&#xff09; 安装master 六、…

基于Python+多层RNN+Tensorflow藏头诗与歌词智能生成-深度学习算法应用(含全部工程源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Tensorflow 环境PyCharm环境 模块实现古诗生成1. 数据预处理2. 模型构建3. 模型训练及保存4. 使用模型生成古诗5. 产生藏头诗6. 用词云展示生成的古诗 歌词生成1. 数据预处理2. 模型构建3. 模型训练并保存4. 生成…

时序约束案例(没有解决)

问题记录 SDI显示项目要求:当外部摄像头无接入时&#xff0c;FPGA产生彩条给显示芯片。当外部摄像头有接入时&#xff0c;显示数据来自于海思。目前能成功显示&#xff0c;但是需要把输出给显示驱动芯片的时钟取反后才可以。尝试使用output delay约束不成功。 项目架构描述 …

【Redis-02】Redis的缓存

Redis的缓存 1.概念1.1什么是缓存1.2为什么使用缓存1.3如何使用1.3.1不适用缓存之前1.3.2 缓存模型和思路&#xff08;使用方法&#xff09;1.3.3 使用之后 2.缓存更新策略2.1数据库缓存不一致解决方案2.2数据库和缓存不一致采用什么方案2.3代码实例 3.缓存穿透3.1缓存穿透是什…

Qt6 Qt Quick UI原型学习QML第六篇

文章目录 效果展示动画片第一小节源码&#xff08;AnimationExample.qml&#xff09;主文件解释语法 源码子文件&#xff08;ClickableImageV2.qml&#xff09;解释语法 效果展示 动画片第一小节 源码&#xff08;AnimationExample.qml&#xff09;主文件 import QtQuick 2.1…

自动驾驶感知系统-激光雷达

感知系统 现有的车载传感器主要包括超声波雷达、激光雷达、毫米波雷达、车载摄像头、红外探头等。主流的自动驾驶感知平台以雷达和车载摄像头为主&#xff0c;呈现多传感器融合发展趋势。基于测量能力和环境适应性&#xff0c;预计雷达和车载摄像头会保持其感知平台霸主地位&a…

Python Selenium设计模式及代码实现

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享&#xff0c;以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。 为什么要用POM 基于python selenium2开始UI级自动化测试并不是多么艰巨的任务。**只需要定位到元素&#xff0c;…

vue中export和export default的使用

<script> export default {name: HelloWorld } $(function () {alert(引入成功) }) </script> 1、export的使用 比喻index.js要使用test.js中的数据&#xff0c;首先在test.js文件中进行导出操作 代码如下&#xff1a; export function list() {alert("list…

EasyExcel写出包含多个sheet页的Excel

EasyExcel导出包含多个sheet页的Excel 1.引入依赖 引入如下的EasyExcel的依赖&#xff0c;或直接下载jar包 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></depende…

文心千帆大模型平台,一站式企业级大模型平台

文心千帆大模型平台&#xff0c;一站式企业级大模型平台 0. 前言1. 人工智能发展历程1.1 传统机器学习1.2 深度学习1.3 大模型时代 2. 文心千帆2.1 文心千帆介绍2.2 文心千帆应用场景2.3 文心千帆平台优势 3. 文心千帆初体验3.1 注册流程3.2 创建应用3.3 在线测试3.4 数据服务3…

玩转ChatGPT:Custom instructions (vol. 1)

一、写在前面 据说GPT-4又被削了&#xff0c;前几天让TA改代码&#xff0c;来来回回好几次才成功。 可以看到之前3小时25条的限制&#xff0c;现在改成了3小时50条&#xff0c;可不可以理解为&#xff1a;以前一个指令能完成的任务&#xff0c;现在得两条指令&#xff1f; 可…

如何将windows下的应用程序直接放到ubuntu下运行

安装wine https://blog.csdn.net/gc_2299/article/details/129077372 安装.NET https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472

Vue中的props配置

结构&#xff1a; main.js //引入Vue import Vue from vue //引入App import App from "./App"; //关闭Vue的生产提示 Vue.config.productionTip false//创建vm new Vue({el:#app,render:h>h(App) }) App.vue <template><div><Student name&qu…

运行Yolov5 7.0遇到的问题

遇到的错误 Traceback (most recent call last):File "E:\Users\user\anaconda3\envs\torch17\lib\site-packages\git\__init__.py", line 89, in <module>refresh()File "E:\Users\user\anaconda3\envs\torch17\lib\site-packages\git\__init__.py"…