Git 基础操作手册:轻松掌握常用命令

news2024/9/20 1:00:06

Git 操作完全手册:轻松掌握常用命令

  • 引言
  • 一、暂存:git add ✏️
  • 二、提交:git commit 📝
  • 三、拉取、拉取合并 🔄
  • 四、推送:git push 🌐
  • 五、查看状态:git status 📊
  • 六、查看历史:git log 📜
  • 七、引用日志:git reflog 🔙
  • 八、总结

引言

在开发过程中,掌握 Git 的常用操作命令是提高工作效率的关键。本章将详细介绍 Git 中最常用的命令,如 git addgit commitgit pullgit push,帮助你高效管理代码库。你将学习如何处理文件暂存、提交、更改同步及版本历史查看等核心任务。无论你是 Git 新手还是有经验的开发者,这些操作都是你日常工作的基础。通过掌握这些命令,你将能够更好地跟踪和管理你的代码变更,确保开发流程的顺畅与稳定。
在这里插入图片描述

一、暂存:git add ✏️

在仓库里刚新建的文件是不会被跟踪起来的,比如我们使用git status就能查看到文件的状态。
在这里插入图片描述
需要使用git add才可以把本地修改的数据暂存到暂存区。暂存区的作用:像 SVN 这种没有暂存区概念的版本控制,可能会产生很多无意义的提交,暂存区可以先将一些修改暂存一下,后面再统一提交到仓库,从而减少提交次数。

基本用法:

git add <path>

通过git add <path>的方式把path目录下的所有文件添加到git的暂存区,当然这些文件不包含已经被删除的文件。
示例:

# 将所有修改添加到暂存区
git add .  

# 将以.cpp结尾的文件的所有修改添加到暂存区
git add *.cpp   

# 将所有以Hello开头的文件的修改添加到暂存区,例如: helloWorld.txt,hello.h,helloGit.md ...
git add hello*   

# 将以hello开头后面只有一位的文件提交到暂存区 
# 例如:hello1.txt,helloA.cpp 如果是helloGit.txt和hello.cxx是不会被添加的。
git add hello?.*   

git add 是把文件添加到暂存区,那如果想从暂存区删除呢?可以使用git rm -f 或者 git rm –cached 把文件从暂存区里移除,这个移除并不是把代码文件从磁盘上删除了,只是说不被git管理了而已。
在这里插入图片描述

二、提交:git commit 📝

git add 只是把文件添加到暂存区而已,并没有真正跟踪起来,需要使用git commit命令提交到本地仓库才能真正被git跟踪记录,git commit命令的用法如下:
在这里插入图片描述
示例:

#把暂存区和当前已被跟踪的文件的所有的修改提交到仓库里,-m参数指定了此次提交的message内容
git commit -a -m "initial commit" .

# 提交Makefile和Logger.cpp的修改
git commit Makefile Logger.cpp –m "修改编译错误,添加了对log4cpp库的依赖" 

在这里插入图片描述

三、拉取、拉取合并 🔄

拉取git fetch):fetch是拉取的意思,git fetch只将远端仓库数据拉取到本地仓库,主要是 将远程仓库所包含分支的最新commit-id记录到本地文件。比如,远端的数据比本地多两个版本,fetch会将最新版本的版本ID写到本地仓库,但是,远端的文件修改并没有拉取到工作区(workspace),它只是拉取最近提交的信息出来,通过这个可以让我们知道本地比远端落后几个版本。

git fetch通常很少去使用,因为在实际使用中会使用一个有GUI的客户端工具,并不需要敲命令。这里介绍git fetch命令以及其他命令主要是为了了解 Git 的工作流程。

拉取合并git pull直接将数据拉取到工作区(workspace)。它主要由两部分构成:

  • git fetch:先拉取,看一下本地仓库落后多少个版本信息。
  • git merge :将数据拉取到工作区。

也就是说,别人修改的代码,我们可以先git fetch到本地仓库,然后git merge拉取到工作区;也可以通过一个命令git pull一起完成这两个操作。

四、推送:git push 🌐

git push 用于将本地仓库中的更改推送到远程仓库。这个命令将本地分支的提交(commits)上传到远程仓库,从而使其他协作者能够看到并合并这些更改。

基本语法:

git push [<remote>] [<branch>]
  • <remote>: 远程仓库的名字,通常是 origin(默认远程仓库的名字)。
  • <branch>: 想推送的本地分支名。

示例:

  1. 推送到默认远程仓库(origin)和当前分支:

    git push
    

    如果当前分支已经配置了上游分支(upstream branch),这个命令会将更改推送到默认远程仓库的对应分支。

  2. 推送到指定的远程仓库和分支:

    git push origin main
    

    将本地的 main 分支推送到远程的 main 分支。

  3. 推送所有本地分支:

    git push --all
    

    将所有本地分支推送到远程仓库。

  4. 推送所有标签(tags):

    git push --tags
    

    将所有本地标签推送到远程仓库。

常见选项:

  • -u--set-upstream:将本地分支与远程分支关联起来,后续可以只用 git pushgit pull 不指定分支。

    git push -u origin feature-branch
    
  • --force-f:强制推送,覆盖远程仓库的历史记录。注意使用这个选项时要非常小心,因为这可能会导致数据丢失。

    git push --force
    
  • --force-with-lease:在强制推送时确保不会覆盖别人推送的更改。相对比 --force 更安全一些。

    git push --force-with-lease
    
  • --dry-run:模拟推送操作,不真正推送任何更改,适用于检查即将推送的内容。

    git push --dry-run
    

错误处理:

  • rejected 错误:通常是因为远程分支比本地分支有更新,可能需要先拉取远程更改并解决冲突。
  • non-fast-forward 错误:通常需要进行合并或变基操作。
    git pull --rebase
    git push
    

五、查看状态:git status 📊

git status 是 Git 中一个非常有用的命令,用于显示当前工作目录和暂存区的状态。这有助于了解哪些文件被修改了、哪些文件被暂存了、以及哪些文件是未跟踪的。

基本语法:

git status

执行 git status 后,会看到以下几类信息:

  1. 当前分支信息:显示你当前所在的分支以及它与远程分支的关系(例如,是否领先或落后于远程分支)。

    On branch main
    Your branch is up to date with 'origin/main'.
    
  2. 暂存区状态:显示哪些文件被暂存(即已准备好进行提交)。

    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
      
      new file:   file1.txt
      modified:   file2.txt
    
  3. 工作目录状态:显示哪些文件被修改但尚未暂存。

    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:   file3.txt
    
  4. 未跟踪的文件:显示哪些文件存在于工作目录中,但 Git 还没有跟踪它们。

    Untracked files:
      (use "git add <file>..." to include in what will be committed)
      
      file4.txt
    

常见选项:

  • -s--short:以简短的格式显示状态。

    git status -s
    

    输出类似于:

    A  file1.txt
    M  file2.txt
    M  file3.txt
    ?? file4.txt
    

    这里的 A 表示新文件已暂存,M 表示修改已暂存,?? 表示未跟踪的文件。

  • -b--branch:显示分支信息。

    git status -b
    

    输出类似于:

    On branch main
    Your branch is up to date with 'origin/main'.
    
  • --porcelain:以机器可读的格式输出状态信息,通常用于脚本。

    git status --porcelain
    

如果工作目录中有很多未跟踪的文件或修改,可以考虑使用 git cleangit restore 命令来清理。

六、查看历史:git log 📜

git log 是 Git 中一个非常重要的命令,用于查看提交历史。它显示了当前分支的提交记录,帮助了解代码的演变过程。

基本语法:

git log [options] [<revision range>] [--] [<path>...]
  • <revision range>: 可以指定一个或多个提交范围。
  • <path>: 仅显示特定路径的提交记录。

基本用法:

  1. 查看提交历史:

    git log
    

    这将显示当前分支的所有提交记录,包括提交的哈希值、作者、日期和提交信息。

  2. 查看简洁的提交历史:

    git log --oneline
    

    以简洁的一行格式显示提交记录,每个提交显示其简短的哈希值和提交信息。

  3. 查看特定文件的提交历史:

    git log -- <file>
    

    显示对指定文件的所有提交记录。

  4. 查看某个分支的提交历史:

    git log branch-name
    

    显示指定分支的提交记录。

常见选项:

  • --pretty: 自定义日志的输出格式。

    git log --pretty=format:"%h - %an, %ar : %s"
    

    这将以自定义格式显示提交记录,其中 %h 是提交的简短哈希, %an 是作者名, %ar 是相对时间, %s 是提交信息。

  • --graph: 显示提交历史的图形化表示。

    git log --graph
    

    这将以图形化的方式展示提交历史和分支合并情况。

  • --abbrev-commit: 显示简短的提交哈希。

    git log --abbrev-commit
    

    这会显示缩短的提交哈希值,而不是完整的哈希值。

  • --since--until: 显示指定时间范围内的提交记录。

    git log --since="2024-01-01" --until="2024-07-01"
    

    只显示在指定时间范围内的提交记录。

  • --author: 显示由特定作者提交的记录。

    git log --author="John Doe"
    

    只显示指定作者的提交记录。

  • --grep: 按提交信息的关键词过滤记录。

    git log --grep="fix bug"
    

    只显示包含指定关键词的提交记录。

  • --patch: 显示每个提交的差异(diff)。

    git log -p
    

    显示每个提交中修改的具体内容。

高级用法:

  • 查看合并提交历史: 只显示合并提交的记录。

    git log --merges
    
  • 查看特定分支的提交历史:

    git log branch1..branch2
    

    显示从 branch1branch2 的提交记录,即 branch2 上而不在 branch1 上的提交记录。

  • 结合多个选项使用:

    git log --pretty=format:"%h - %an, %ar : %s" --graph --abbrev-commit
    

    以自定义格式显示提交记录,并附带图形化表示和简短的哈希值。

  • 日志文件过长:如果提交历史记录非常长,可以使用分页工具(如 less)来查看:

    git log | less
    
  • 在大项目中,查看提交历史可能会比较慢。可以限制显示的提交数量,例如:

    git log -n 10
    

七、引用日志:git reflog 🔙

git reflog 是 Git 中一个非常重要的命令,用于查看和管理引用日志(reflog)。引用日志记录了对 Git 引用(如分支、HEAD)的所有修改历史,包括提交、合并、重置、移动分支等操作。它在恢复丢失的提交、调试和审计历史方面非常有用。

基本语法:

git reflog [options]

这将显示 HEAD 的所有历史记录,包括提交、重置、合并等操作。输出内容包括操作编号(reflog index)、提交哈希、操作类型和消息。

也可以查看特定操作的引用日志:

git reflog show HEAD@{<n>}

这里的 <n>reflog 的索引。例如,HEAD@{1} 表示上一个 HEAD 状态。可以用来查看指定历史状态的详细信息。

八、总结

在这一章中,我们详细介绍了 Git 的一些常用操作命令,包括 git addgit commitgit pullgit pushgit statusgit loggit reflog。通过这些命令,你可以更高效地管理你的代码库,确保代码版本的准确性和一致性。
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

第09课 Scratch入门篇:小鸡啄米-自制积木实现

小鸡啄米-自制积木 故事背景&#xff1a; 在上一章的案例中&#xff0c;实现了小鸡啄米的动画&#xff0c;但是发现太多的重复代码&#xff0c;是我们编程的时候代码泰国繁琐&#xff0c;我们可以使用自制积木&#xff0c;将相同的代码提取出来制作成一个新的积木&#xff0c;在…

ESP32CAM人工智能教学17

ESP32CAM人工智能教学17 内网穿透,视频上云 小智一心想让ESP32Cam视频能发送到云端,这样我们在任何地方,都能查看到家里的摄像头了,甚至能控制摄像头的小车了。 内网穿透的技术原理想要让ESP32Cam把视频发送到云端,就必须要做内网穿透。也就是用户的手机(或电脑),可以…

Windows中如何配置Gradle环境变量?

本篇教程,主要介绍,如何在Windows中配置Gradle7.4环境变量 一、下载安装包 安装包下载;gradle-7.4-all.zip 二、解压安装包

Python基础知识笔记---保留字

保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。 一、保留字概览 二、保留字用途 1. False&#xff1a;表示布尔值假。 2. None&#xff1a;表示空值或无值。 3. True&#xff1a;表示布尔值真。 4. not&#xff1a;布尔逻辑操作符…

LabVIEW 使用 I/O 服务器

I/O 服务器是共享变量引擎&#xff08;SVE&#xff09;插件&#xff0c;用于与不使用NI专有的NI发布-订阅协议&#xff08;NI-PSP&#xff09;的设备和应用程序通信。I/O 服务器充当LabVIEW VI中的共享变量与OPC、Modbus或EPICS数据标签之间的桥梁。它们插入SVE中&#xff0c;提…

生成式人工智能最重要的三个神经网络,从谷歌DeepDream、Magenta、到NVIDIA的StyleGAN

神经网络模型&#xff08;Neural Network Model&#xff09;是一种受生物大脑启发的机器学习模型&#xff0c;用于模拟人脑的结构和功能。它由大量相互连接的人工神经元&#xff08;节点&#xff09;组成&#xff0c;这些神经元按层级结构排列&#xff0c;通常包括输入层、隐藏…

OSI七层网络模型:构建网络通信的基石

在计算机网络领域&#xff0c;OSI&#xff08;Open Systems Interconnection&#xff09;七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次&#xff0c;每一层都有其特定的功能和职责&#xff0c;共同协作完成数据从发送端到接收端的传输。接下来&am…

制品库nexus

详见&#xff1a;Sonatype Nexus Repository搭建与使用&#xff08;详细教程3.70.1&#xff09;-CSDN博客 注意事项&#xff1a; 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…

leetcode 1596 每位顾客经常订购的商品(postgresql)

需求 表&#xff1a;Customers ---------------------- | Column Name | Type | ---------------------- | customer_id | int | | name | varchar | ---------------------- customer_id 是该表主键 该表包含所有顾客的信息 表&#xff1a;Orders ---------------------- …

LeetCode 144.二叉树的前序遍历 C写法

LeetCode 144.二叉树的前序遍历 思路&#x1f9d0;&#xff1a; 遍历很简单&#xff0c;但是我们需要开空间进行值的存储&#xff0c;结点个数也可以用递归进行统计&#xff0c;开好空间就可以用数组进行值的存储&#xff0c;注意下标要么用全局&#xff0c;要么指针解引用&…

【Canvas与艺术】五色五角大楼

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五L莫比乌斯五角大楼</title><style type"text/css&qu…

解决国内 github.com 打不开进不去的方法

解决国内 github.com 打不开进不去的方法 修改host文件 电脑的hosts文件在下面这个地址&#xff0c;找到hosts文件 C:\Windows\System32\Drivers\etc 右键点击hosts文件,选择复制,然后粘贴到桌面上。右键点击桌面上的hosts文件,选择“用记事本打开该文件”,hosts 文件中需要写…

VPX电源模块性能检测需要测试哪些指标?

随着技术的不断进步&#xff0c;VPX电源模块已成为军工、通讯等关键行业不可或缺的组成部分。接下来&#xff0c;让我们一起了解VPX电源以及如何检测其性能。 什么是VPX电源&#xff1f; VPX电源是一种军用嵌入式计算机规范下的电源产品&#xff0c;采用了7排引脚阵列高速连接器…

使用Android Studio For Platform阅读调试AOSP源码

上一篇文章中&#xff0c;我们编译了AOSP的源码并刷入自己编译的ROM到Pixel 6设备中。本文我们使用Android官方提供的IDE&#xff08;Android Studio For Platform&#xff09;来打开AOSP源码&#xff0c;并进行debug调试&#xff0c;这样可以方便我们跟踪底层代码的调用流程。…

C# (VS2019 Frameworks) 背景程序组件BackgroundWorker 的基本和使用

前言&#xff1a; C#的应用软件中&#xff0c;经常要考虑到UI的相应和处理的程序&#xff08;尤其占用时间很长的程序&#xff09;之前的相应配合问题。 传统的思路&#xff0c;用线程的控制方法&#xff0c;加原子锁等方法&#xff0c;可是&#xff0c;再怎么搞都没有 windo…

大数据学习之Flink基础(补充)

Flink基础 1、系统时间与事件时间 系统时间&#xff08;处理时间&#xff09; 在Sparksreaming的任务计算时&#xff0c;使用的是系统时间。 假设所用窗口为滚动窗口&#xff0c;大小为5分钟。那么每五分钟&#xff0c;都会对接收的数据进行提交任务. 但是&#xff0c;这里有…

【HadoopShuffle原理剖析】基础篇二

Shuffle原理剖析 Shuffle&#xff0c;是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。分为Map端的操作和Reduce端的操作。 Shuffle过程 Map端的Shuffle Map的输出结果首先被缓存到内存&#xff0c;当缓存区容量到达80%&#xff08;缓冲区默认100MB&#xff…

[论文笔记]思维链提示的升级版——回退提示

引言 今天又带来一篇提示策略的论文笔记&#xff1a;TAKE A STEP BACK: EVOKING REASONING VIA ABSTRACTION IN LARGE LANGUAGE MODELS。 作者提出了回退提示(STEP-BACK PROMPTING)技术&#xff0c;使大模型能够进行抽象&#xff0c;从包含具体细节的实例中推导出高层次的概念…

centos7 docker空间不足

今天在使用docker安装镜像的时候&#xff0c;出现报错 查看原因&#xff0c;发现是分区空间不足导致的 所以考虑进行扩容 首先在vmware扩容并没有生效 因为只是扩展的虚拟空间&#xff0c;并不支持扩展分区大小&#xff0c;下面对分区进行扩容 参考&#xff1a; 分区扩容 主…