Git 基本命令与操作流

记录 Git 中的基本命令和创建仓库、提交文件、删除文件等方面的操作


Git 基本命令

git status:查看状态

nothing to commit, working directory clean:所有已跟踪文件在上次提交后未被更改过,或者说当前目录下没有出现任何处于未跟踪状态的新文件。

Untracked files(未跟踪的文件):之前的快照(提交/ commit )中没有这些文件。

Changes not staged for commit:已跟踪文件的内容发生了变化(已修改文件),但还没有放到暂存区。要暂存这次更新,需要运行 git add 命令。

Changes to be committed :暂存区文件。创建后 git add (被追踪)还未提交的文件。

特殊的文件状态:同时属于Changes to be committedChanges not staged for commit 两种状态

$ git add README
$ vi README # 修改文件
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

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:   CONTRIBUTING.md

当将一个文件添加到暂存区(git addstage),然后修改文件内容,那么文件就会同时出现在暂存区和非暂存区。

实际上,Git 只会暂存运行了 git add 命令的文件。如果执行 commit 命令,提交的版本是运行 git add 命令时的那个版本,而不是在工作区中修改后的当前版本。

git init:初始化 repository

$ git init
Initialized empty Git repository in C:/Users/Administrator/Desktop/git_test/.git/

随即在指定目录下创建一个空的 Git repository。生成的 .git 目录是一个隐藏文件,可以直接在 资源管理器 中查看,或者在 cmd 中输入命令 dir /a 。此目录是Git来跟踪管理版本库的,不能手动修改此目录里的文件。

git init 后就运行 git add <files> 命令,开始跟踪当前目录下的文件。

git log:显示提交日志

$ git log
commit e49ffb91d8776b952000f5a15791439ea11a51fe (HEAD -> master)
Author: phil <xxxxxxxxxx@xx.com>
Date:   Tue Jan 16 19:32:31 2024 +0800
    add distributed under the GPL

commit 670e23aeddd81f8fc3151d7866ad368b959376a4
Author: phil <xxxxxxxxxx@xx.com>
Date:   Tue Jan 16 17:03:37 2024 +0800
    add distributed

commit 5f2427d23f7bc17ab29a16c37c5bb380aa033d76
Author: phil <xxxxxxxxxx@xx.com>
Date:   Tue Jan 16 16:36:16 2024 +0800
    write a readme file

显示从最近到最远的提交日志,有 commit idAuthorData 以及文件修改详细信息。和 SVN 不一样,Git 的 commit id 不是1,2,3……递增的数字,而是一个 SHA1 计算出来的十六进制数字。

commit(提交)比较多,git log 的内容在一页显示不完整,就会显示冒号 :回车键可以往下滚一行、空格键往下滚一页,以便继续查看剩余内容直至显示 (END)。英文状态下 按 q 可以退出git log 状态。

参数--prettygit log --pretty=oneline,单行显示提交日志

$ git log --pretty=oneline
e49ffb91d8776b952000f5a15791439ea11a51fe (HEAD -> master) add distributed under the GPL
670e23aeddd81f8fc3151d7866ad368b959376a4 add distributed
5f2427d23f7bc17ab29a16c37c5bb380aa033d76 write a readme file

git reset:回退版本

参数--hardgit reset --hard [HEAD~[?]]/[commit_id]/HEAD@{?}

在 Git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,后面 HEAD~[3] 来表示(难确定目标版本与HEAD~[?]的对应关系,不建议使用);根据 git reflog 输出的 commit_id 来确定回退版本;根据 git reflog 输出的 HEAD@{?} 来回退版本。

回退版本操作也会记录在日志中,并有相应的 commit id

$ git reflog
5f2427d (HEAD -> master) HEAD@{0}: reset: moving to 5f2427d23f7bc17ab29a16c37c5bb380aa033d76
670e23a HEAD@{1}: reset: moving to HEAD^
e49ffb9 HEAD@{2}: commit: add distributed under the GPL
670e23a HEAD@{3}: commit: add distributed
5f2427d (HEAD -> master) HEAD@{4}: commit (initial): write a readme file

$ git reset --hard "e49ffb9"
HEAD is now at e49ffb9 add distributed under the GPL

git reset 除了可以回退版本,也可以把被修改的 staged 的文件回退到工作区,详见 Git 操作流撤销修改。

git reflog:显示所有操作日志

reflogReference logs(参考日志),git reflog命令可以显示所有的历史版本记录。

这不同于git log 只可以查看到 HEAD 指针及其之前的版本信息,如果版本发生过回退操作,则无法显示 HEAD 指针之后的版本情况。

在这里插入图片描述

$ git reflog
e49ffb9 (HEAD -> master) HEAD@{0}: commit: add distributed under the GPL
670e23a HEAD@{1}: commit: add distributed
5f2427d HEAD@{2}: commit (initial): write a readme file

输出结果:
commit id 的前7位:根据这7位可以将版本库恢复到对应节点状态

HEAD@{n}:表示 HEAD 指针前移两次的版本,也就是上上个版本

最后一段字符串为提交的说明信息。

git add:追踪文件

git add 命令使用文件目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“精确地将内容添加到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。

$ git add fileName 指定文件
# 一次 add 多个文件
$ git add file1.txt file2.txt file3.txt
# 提交被修改的和新建的文件,但不包括被删除的文件
$ git add.
# 更新所有改变的文件,即提交所有变化的文件
$ git add -u --update update tracked files
# 提交已被修改和已被删除文件,但是不包括新的文件
$ git add -A --all add changes from all tracked and untracked files 

git commit:提交

git commit -m 'commit message(提交描述) fileName'

git checkout -- file:撤销修改

# 撤销对文件的修改
$ git checkout -- file

这里有两种情况:

  1. filename 已经添加到暂存区后,又作了修改,现在撤销修改,会回到在暂存区中的状态
  2. filename 自修改后还没有被放到暂存区,现在撤销修改,会回到上次提交的状态

总之,就是让这个文件回到最近一次 git addgit commit 时的状态。

git rm file:删除文件


Git 操作流

创建 repository

  1. 创建文件夹,作为版本库/仓库/repository。在 repository 中的所有文件都可以被 Git 管理,Git 能跟踪每个文件的修改、删除,以便任何时刻都可以追踪历史,或者在将来某个时刻还原。
    Windows 中命令如下:

    md C:\Users\Administrator\Desktop\Git_test
    cd C:\Users\Administrator\Desktop\Git_test
    dir
    

    Linux 中命令如下:

    mkdir /home/git_test
    
  2. 初始化一个 Git 仓库(把上述的目录变成 Git 可以管理的仓库)

    $ git init
    Initialized empty Git repository in C:/Users/Administrator/Desktop/git_test/.git/
    

    随即在指定目录下创建一个空的 Git repository。生成的 .git 目录是一个隐藏文件,可以直接在 资源管理器 中查看,或者在 cmd 中输入命令 dir /a 。此目录是Git来跟踪管理版本库的,不能手动修改此目录里的文件。


添加文件到 repository

  1. 创建并编辑文件

    $ touch 'fileName' # 创建文件
    $ vi 'fileName' # 输入a、i、o进行插入模式
    

    按键 esc进入命令模式,输入 :wq 退出文件编辑并保存。

  2. 将文件添加到仓库

    $ git add 'fileName' # 把文件添加到仓库(可添加多个文件或多次添加)
    

    命令执行后,没有任何提示。

  3. 提交文件

    $ git commit -m 'commit message' # 把文件提交到仓库
    

    -m 后面输入的是本次提交的说明,最好输入有意义的提交/改动信息。

    git commit命令执行成功后显示:几个个文件被改动(file changed);插入了几行内容( insertions(+) )。git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

Git 添加文件到 repository 需要 addcommit 两步,以便多次 add 不同的文件,最后一次性提交。


修改 committed 的文件并再次提交

对已经提交的文件修改,并将修改后的文件再次提交。

  1. 修改文件

    # 编辑文件
    $ vi 'fileName' # 输入a、i、o进行插入模式
    

    按键 esc 进入命令模式,输入 :wq 退出文件编辑并保存。

  2. 查看当前的状态。哪个文件被修改,是否被 commit

    $ git status
    # 查看修改内容
    $ git diff readme.txt # difference(diff)
    
  3. 将修改后的文件再次提交

    $ git add readme.txt
    $ git commit -m "add distributed"
    $ git status
    $ cat 'fileName' # 将文件内容打印显示
    

删除文件

如果文件存在于版本库中(被追踪 /add),删除文件需要在工作区和版本库中都删除,仅删除工作区中的文件不会影响版本库中的文件。

$ touch file.txt
$ git add file.txt
$ git commit -m "add file.txt"

在工作区中删除文件

$ rm test.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    test.txt
no changes added to commit (use "git add" and/or "git commit -a")

在版本库中删除文件。

$ git rm test.txt 
$ git commit -m "remove test.txt" # 提交删除 
# output
[master b3a984f] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt

若在工作区中误删文件后,可以利用版本库中的文件还原:

$ git checkout -- test.txt

撤销修改

  1. 修改状态为 stagedcommitted 的文件,若想丢弃工作区的修改时,用命令 git checkout -- file

  2. 修改状态为 staged 的文件,并添加到了暂存区,想丢弃修改。分两步:第一步用命令 git reset HEAD <file>,然后 git checkout -- file

  3. 修改状态为 committed 的文件,并已提交但没有推送到远程库,想要撤销本次提交。用命令 git reset 回退版本。

在这里插入图片描述



参考:

Git book 2nd Edition (2014)

Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)

Git 教程 | 菜鸟教程 (runoob.com)

faster-git datawhale

【学了就忘】Git操作 — 51.git reflog命令 - 简书 (jianshu.com)

git rebase详解(图解+最简单示例,一次就懂)-CSDN博客

)

Git 教程 | 菜鸟教程 (runoob.com)

faster-git datawhale

【学了就忘】Git操作 — 51.git reflog命令 - 简书 (jianshu.com)

git rebase详解(图解+最简单示例,一次就懂)-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 类与对象(对象的分配机制、对象的创建过程、匿名对象)

面向对象 面向对象编程&#xff08;Object-Oriented Programming 简称 OOP&#xff09;是一种程序设计思想和编码架构。 Java 是完全面向对象的&#xff0c; 必须熟悉 OOP 才能够编写 Java 程序。 面向对象的程序是由对象组成的&#xff0c;每个对象包含对用户公开的特定功能…

基于springboot+vue的蜗牛兼职网的设计与实现系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

力扣每日一练(24-1-18)

经验一&#xff1a;不要把问题想复杂 Python&#xff1a; min_price float(inf)max_profit 0for price in prices:min_price min(min_price, price)max_profit max(max_profit, price - min_price)return max_profit C#&#xff1a; public int MaxProfit(int[] prices) {i…

GNU Radio简介及流程图搭建

文章目录 前言一、GNU Radio 是什么&#xff1f;二、GNU Radio 安装三、搭建第一个流程图1、创建 GRC 文件2、添加块3、运行流程图 前言 欢迎来到无线通信的世界&#xff0c;初步接触 GNU Radio&#xff0c;对其学习进行一个记录。 一、GNU Radio 是什么&#xff1f; GNU Rad…

【重点!!!】【背包】【回溯】518.零钱兑换II

题目 跟39.组合总数、322.零钱兑换题目很类似。 法1&#xff1a;背包DP&#xff0c;最优解法 解释如下&#xff1a; 0 1 2 3 4 5(背包容量)1 0 0 0 0 0 没有硬币的时候&#xff09; 0 1 2 3 4 5(背包容量) 1 1 1 1 1 1 1 0 1 2 3 4 5(背包容量) 1 …

深入解析 Java 方法引用:Lambda 表达式的进化之路

前言 方法引用是 Java 8 提供的一种新特性&#xff0c;它允许我们更简洁地传递现有方法作为参数。这项特性实际上是对 Lambda 表达式的一种补充&#xff0c;通过方法引用&#xff0c;我们可以直接引用现有方法&#xff0c;而无需编写完整的Lambda表达式。最近在使用方法引用的…

Spring(19) ThreadPoolTaskExecutor 线程池的使用

目录 一、线程池简介1.1 为什么使用线程池1.2 线程池为什么需要使用队列1.3 线程池为什么要使用阻塞队列而不是用非阻塞队列1.4 如何配置线程池1.5 execute() 和 submit() 方法 二、ThreadPoolTaskExecutor 线程池简介2.1 简介2.2 核心参数配置2.3 ThreadPoolTaskExecutor 内部…

TortoiseSVN客户端如何安装配置并实现公网访问服务端提交文件到本地服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

CSV文件中json列的处理2

如上所示&#xff0c;csv文件中包含以中括号{}包含的json字段&#xff0c;可用如下方法提取&#xff1a; import pandas as pd from datetime import date todaystr(date.today()) import jsonfilepath/Users/kangyongqing/Documents/kangyq/202401/调课功能使用统计/ file104…

顶顶通呼叫中心中间件如何实现自己呼叫自己并且放音:一步步配置(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件如何实现自己呼叫自己并且放音&#xff1a;一步步配置 一、配置acl.conf 打开ccadmin-》点击配置文件并且打开acl.conf-》配置好了点击提交XML。 注意&#xff1a;acl.conf的服务器IP必须是内网IP 添加了之后在运维调试输入reloadacl 在运维调试执…

对象存储, 开源MinIO docker-compose.yml 文件

文章目录 python SDK 文档地址&#xff1a;docker-compose.yml 文件控制台使用&#xff1a;应用服务中使用样例&#xff1a; python SDK 文档地址&#xff1a; https://min.io/docs/minio/linux/developers/python/API.html docker-compose.yml 文件 version: 3services:min…

优化微信小程序更新体验:异步更新与强制更新方案解析

在微信小程序的开发和迭代过程中&#xff0c;新版本覆盖率的问题一直备受关注。由于小程序采用异步更新机制&#xff0c;在用户首次打开或冷启动时才会检查并下载新版本&#xff0c;导致部分用户无法及时应用上最新版本。为了解决这一问题&#xff0c;微信团队经过深入研究和讨…

Prometheus 监控容器

容器监控&#xff1a;cAdvisor Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux/Windows/Mac机器上。容器镜像正成为一个新的标准化软件交付方式。 例如&#xff0c;可以通过以下…

NebulaGraph7 种查询(关键词、向量、混合检索),Graph RAG 探索知识图谱

NebulaGraph7 种查询&#xff08;关键词、向量、混合检索&#xff09;&#xff0c;Graph RAG 探索知识图谱 1.架构思路 如果你熟悉知识图谱和图数据库 NebulaGraph&#xff0c;可以直接跳到 “RAG 具体实现” 章节。如果你不熟悉 NebulaGraph&#xff0c;请继续往下读。 什么…

INS-06003错误处理

在麒麟V10操作系统上安装Oracle RAC 19C&#xff0c;安装GI的建立互信步骤中&#xff0c;遇到INS-06003错误&#xff1a; [INS-06003] Failed to setup password SSH connectivity with following node(s) 查看详细信息&#xff1a; PRVG-11001: PRCZ-2136: PRCZ-2006: 此时在操…

链动2+1模式:月流水6000万是怎么做到的?

一个好的企业往往只需要最简单的营销方式。当我们面对当今的商业市场&#xff0c;琳琅满目的商业模式&#xff0c;应接不暇的营销方案&#xff0c;我们一定会举足无措的不知道怎么选择。因为一个好的公司或企业&#xff0c;一定要有一个十分经得起推敲的模式来面对消费者。 那么…

基于Java开发的智慧养老管理系统详细设计和实现【附源码】

基于Java开发的智慧养老管理系统详细设计和实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制…

C++系列-第1章顺序结构-9-字符类型char

在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客&#xff0c;主要讲述字符类型char 字符类型char 在C编程语言中&#xff0c;char是一种基本的数据类型&#xff0c;它用于存储单个字符。字符可以是字母、数字、标点符号或者…

人工智能AI绘画Midjourney绘画提示词Prompt大全【宝藏级收藏】

一、AI绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支…

【EI会议征稿通知】第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)

第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024&#xff09; 2024 7th International Conference on Advanced Electronic Materials, Computers and Software Engineering 第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)将于2024年5月10-1…