Git 入门指南:核心概念与常用命令全解析

Git 入门指南:核心概念与常用命令全解析

  • 前言
  • 一、Git相关概念
    • 1.1 工作目录
    • 1.2 暂存区
    • 1.3 本地仓库
    • 1.3 远程仓库
      • 1.3.1 首次提交到远程仓库提示输入用户名密码
      • 1.3.2 解决方法
  • 二、Git常用命令
    • 2.1 配置命令
      • 2.1.1 查看当前 Git 配置的所有信息
      • 2.1.2 查看系统全局配置
      • 2.1.3 修改系统全局的默认分支
        • 2.1.3.1 切换分支
        • 2.1.3.2 切换分支操作详细演示
          • 2.1.3.2.1 本地切换分支
          • 2.1.3.2.2 切换到远程分支(并在本地创建对应的分支)
          • 2.1.3.2.2 快速切换回上一个分支
      • 2.1.4 查看当前用户全局配置
      • 2.1.5 查看当前仓库配置信息
      • 2.1.6 配置用户名和邮箱
      • 2.1.7 删除用户名或者邮箱
    • 2.2 其他常用命令
      • 2.2.1 创建仓库
      • 2.2.2 查看当前状态
      • 2.2.3 添加到暂存区
      • 2.2.4 将暂存区的内容提交到本地仓库
      • 2.2.5 推送到远程仓库
      • 2.2.6 查看代码的修改部位
      • 2.2.7 查看提交记录
    • 2.3 操作远程仓库
      • 2.3.1 本地仓库关联远程仓库
      • 2.3.2 推送到远程仓库
        • 2.3.2.1 推送本地分支到远程同名分支
        • 2.3.2.2 推送本地分支到远程不同名分支
        • 2.3.2.3 省略远程分支名(默认同名)
        • 2.3.2.4 删除远程分支
        • 2.3.2.5 强制推送(覆盖远程分支)
        • 2.3.2.6 设置默认推送
        • 2.3.2.7 推送所有分支
      • 2.3.3 查看关联的远程仓库
      • 2.3.4 删除已关联的远程仓库
      • 2.3.5 拉取远程仓库
      • 2.3.6 实际工作流示例
        • 场景:将本地开发分支推送到远程仓库

前言

在现代软件开发中,版本控制工具是开发者不可或缺的“得力助手”,而 Git 作为当前最流行的分布式版本控制系统,已成为团队协作和个人项目管理的标配。无论是跟踪代码变更、回溯历史版本,还是多人协同开发、远程同步项目,Git 都能提供高效且可靠的支持。然而,对于初学者而言,Git 的工作机制和命令体系往往显得抽象且复杂,诸如“工作目录、暂存区、本地仓库”的概念区分,以及“add、commit、push”等命令的实际应用,都可能成为入门路上的阻碍。

本文专为 Git 新手打造,旨在通过清晰的概念拆解和实操案例,帮助读者快速掌握 Git 的核心逻辑与常用技巧。文章第一部分将系统讲解 Git 的四大核心区域——工作目录、暂存区、本地仓库和远程仓库,通过直观的图示展示它们之间的数据流关系,让你明白“代码从修改到提交的完整路径”;第二部分则聚焦高频使用的 Git 命令,从配置层级、仓库初始化、代码提交到远程同步,详细解析每个命令的功能、参数及实际场景用法,并附上操作截图辅助理解。

无论你是刚接触版本控制的编程初学者,还是需要梳理 Git 知识体系的开发者,本文都将为你打下坚实的基础,让你在项目开发中轻松驾驭 Git,告别“代码丢失”“版本混乱”的困扰,真正发挥版本控制的价值。接下来,就让我们一同开启 Git 的学习之旅吧!

一、Git相关概念

1.1 工作目录

就是我们自己写代码的文件夹,随时随地的写、修改,不会被记录和跟踪。
在这里插入图片描述

1.2 暂存区

我们将自己写好的代码放进暂存区,就做了跟踪。代码放在暂存区之后,在工作目录如果对其修改了,发现修改的不对,可以随时删除工作目录的修改,将暂存区的恢复到工作目录。
在这里插入图片描述
一旦点击+添加到暂存区后,就在暂存区可以看到它。之后再修改还可以再工作目录看到修改的地方。
在这里插入图片描述

1.3 本地仓库

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 远程仓库

上面有提及远程仓库。其实远程仓库就是在服务器上的一个仓库。第一次使用需要在上面创建,之后克隆到本地。请参看上一篇文章《上传代码到gitee仓库》这里我使用的是CSDN上的GitCode,不是Gitee,但大同小异。
下面简要说一下创建仓库吧。

登录自己的GitCode账号,这个可以申请。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在电脑的任何一个文件夹下都可以右键,点击Git Bash,之后将剪切板的文字粘贴进去。请注意,右键–粘贴,不要使用Ctrl+V!
之后就将服务器的仓库克隆到本地了。

1.3.1 首次提交到远程仓库提示输入用户名密码

如果从GitCode克隆了工程,之后修改了代码,想要提交到远程仓库,这个时候会提示:

输入用户名
输入密码
(解释:刚才我遇到这个问题,现在已经解决了,问题没有截图)

1.3.2 解决方法

  • 用户名:就是gitcode的用户名,比如我叫:smart_boy_,那么就把这个写上去。
  • 密码:这个密码是在gitcode上生成的令牌。下面详细讲一下过程。
    • 在“访问令牌”,新建访问令牌。
      在这里插入图片描述
      在这里插入图片描述

    • 最后点击新建访问令牌
      在这里插入图片描述

    • 之后会显示你的令牌,相当于一个密码,一定要保存好这个令牌。上面的密码一栏就写这个令牌就可以了。

之后就可以git push到远程仓库了。

二、Git常用命令

Git 配置有三个层级:

  • 系统级 (--system) - 对所有用户生效
  • 全局级 (--global) - 对当前用户的所有仓库生效
  • 仓库级 (--local) - 只对特定仓库生效
  1. 系统全局配置(–system):包含了系统内的所有⽤户和所有仓库的配置信息,系统配置存放在Git安装⽬录下C:\Program Files\Git\etc\gitconfig。
  2. ⽤户全局配置(–global):包含了当前⽤户的所有 Git 仓库配置,它存放在⽤户⽬录下:C:\Users[系统⽤户名].gitconfig。
  3. 仓库配置(–local):仓库级配置仅适⽤于某个 Git 仓库,它存放在项⽬⽬录下:项⽬根⽬录/.git/config

⽽这三个配置⽂件的优先级为:

系统全局配置 < ⽤户全局配置 < 仓库配置

2.1 配置命令

2.1.1 查看当前 Git 配置的所有信息

git config --list

或者

git config -l

在这里插入图片描述
最后一行输入q,就可以退出。

2.1.2 查看系统全局配置

git config --system --list

在这里插入图片描述

2.1.3 修改系统全局的默认分支

比如修改为main。

git config --global init.defaultBranch main

在这里插入图片描述

2.1.3.1 切换分支

在 Git 中切换分支可以使用 git checkout 或较新的 git switch 命令。

git switch 想要切换的分支名
git checkout 想要切换的分支名
2.1.3.2 切换分支操作详细演示
2.1.3.2.1 本地切换分支

先查看一下当前的所有分支:

git branch  # 查看本地分支
# 或查看包括远程分支在内的所有分支
git branch -a

在这里插入图片描述

2.1.3.2.2 切换到远程分支(并在本地创建对应的分支)

如果要切换到一个仅存在于远程的分支(如 origin/release),可以直接创建并切换到本地对应分支:

# 方法 1: checkout
git checkout -b 本地分支名 origin/远程分支名# 方法 2: switch(更推荐)
git switch -c 本地分支名 origin/远程分支名
2.1.3.2.2 快速切换回上一个分支
git checkout -
# 或
git switch -

在这里插入图片描述

  • 注意事项
    • 切换分支前,确保当前分支的修改已提交(git commit)或暂存(git stash),否则未提交的修改可能会被带到新分支。
    • 如果分支名称包含特殊字符(如 /),直接输入即可,Git 会自动识别。

2.1.4 查看当前用户全局配置

git config --global --list

在这里插入图片描述

2.1.5 查看当前仓库配置信息

git config --local --list

在这里插入图片描述

2.1.6 配置用户名和邮箱

git config --global user.name "你的名字"

这里,“你的名字” 可以自由修改。

git config --global user.email "你的邮箱"

同样,邮箱可以自己修改。

2.1.7 删除用户名或者邮箱

删除全局配置:

git config --global --unset user.name
git config --global --unset user.email

重新设置正确的全局配置

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

如果某些仓库需要特殊配置,可以单独设置:

git config user.name "Repo-specific Name"
git config user.email "repo.email@example.com"

2.2 其他常用命令

2.2.1 创建仓库

对于没有git仓库的工程,可以在终端执行下面的命令创建仓库。

git init

2.2.2 查看当前状态

git status

可以看到当前工作目录下是否有文件已修改,是否跟踪。

  • Changes to be committed表⽰已经添加到暂存区的⽂件。
  • Changes not staged for commit表⽰已经修改但没有添加到暂存区的⽂件。
  • Untracked files表⽰未跟踪的⽂件。就是新建的文件,还未对其进行跟踪。

在这里插入图片描述

新建了文件a.h,之后再次执行git status命令。

在这里插入图片描述

执行git add .之后再次执行git status
在这里插入图片描述

2.2.3 添加到暂存区

git add .

后面加.表示全部文件都添加到暂存区,如果只添加一个文件,可以加文件名。

2.2.4 将暂存区的内容提交到本地仓库

git commit -m "描述本次修改的内容"

也可以有如下参数:

  • 参数-a, 表示直接从工作区提交到版本库, 略过了git add步骤, 不包括新增的文件
git commit -a
  • 提交暂存区的指定文件到仓库区
git commit filename
  • 使用一次新的commit, 替代上一次提交, 会修改commit的hash值( id)
git commit --amend -m "描述本次修改的内容"

比如说,我前面已经提交了一次,现使用git commit --amend -m "描述本次修改的内容"命令,又提交了一次。

在这里插入图片描述
此时查看一下VScode。

在这里插入图片描述
在这里插入图片描述
两个版本被合并了。

在这里插入图片描述
在git bash查看一下状态。

在这里插入图片描述
查看一下修改内容:
在这里插入图片描述
之后测试一下git commit -a命令。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看下提交信息:

在这里插入图片描述
去VScode里看下。
在这里插入图片描述
我们手动提交一次。

git push

在这里插入图片描述
最后测试一下git commit filename这个命令。比如我们再新建两个文件。
在这里插入图片描述

但只提交b.c。先将其都放进暂存区。
在这里插入图片描述
这个时候对b.h进行修改。看下修改的内容。

在这里插入图片描述
再次跳过git add b.h,直接提交到本地仓库。

在这里插入图片描述
看下VScode。
在这里插入图片描述
我们使用命令来操作。

在这里插入图片描述
在这里插入图片描述
上面错别字,“推送到”。

2.2.5 推送到远程仓库

上面已经讲过了推送的命令:

git push

2.2.6 查看代码的修改部位

git diff

如果只看某一个文件的修改,可以加上文件名,比如:

git diff a.c

举例:
在这里插入图片描述
删除的⾏:会⽤减号(-)标记。
新增的⾏:会⽤加号(+)标记。

2.2.7 查看提交记录

上面已经提到了这个命令。

git log

另外,可以有其他的用法。

  • 查看日志(比如,最近5条), 不带参数-n则显示所有日志
git log -n5

在这里插入图片描述

  • 参数“–oneline”可以让日志输出更简洁( 一行)
git log -n20 --oneline

在这里插入图片描述

  • 参数“–graph”可视化显示分支关系
git log -n20 --graph

在这里插入图片描述

  • 显示某个文件的版本历史
git log --follow [file]

在这里插入图片描述

2.3 操作远程仓库

2.3.1 本地仓库关联远程仓库

git remote add origin <远程仓库URL>

以HTTPS为例,它的命令是这样的:

git remote add origin https://gitcode.com/smart_boy__/Git_Test.git

以SSH为例,它的命令是这样的:

git remote add origin git@gitcode.com:smart_boy__/Git_Test.git

2.3.2 推送到远程仓库

git push 是将你本地仓库的更改推送到远程仓库的命令。通常⽤于在你本地完成⼀些修改(如提交git commit)后,将这些更改同步到远程仓库,使其他协作者可以看到你所做的更改。

git push <远程仓库名> <本地分支名>:<远程分支名>
  • <远程仓库名>:通常是 origin(默认远程仓库名称),也可以是其他自定义的远程仓库别名。
  • <本地分支名>:要推送的本地分支名称(如 maindev)。
  • <远程分支名>:远程仓库的目标分支名称(可与本地分支名不同)。
2.3.2.1 推送本地分支到远程同名分支
git push origin main:main
  • 将本地 main 分支推送到远程 originmain 分支。
  • 如果远程分支不存在,Git 会自动创建它。

在这里插入图片描述

2.3.2.2 推送本地分支到远程不同名分支
git push origin feature-login:remote-feature
  • 将本地 feature-login 分支推送到远程 remote-feature 分支。
2.3.2.3 省略远程分支名(默认同名)
git push origin main
  • 等价于 git push origin main:main
2.3.2.4 删除远程分支
git push origin :remote-branch
  • 通过省略本地分支名(留空 : 左侧),推送一个“空分支”到远程,从而删除远程分支 remote-branch

实际操作:
我在GitCode里面新建了远程分支,名为dev。之后再本地的git bash拉取一次远程仓库。

在这里插入图片描述
此时我去查看远程仓库的dev分支,发现确实没有了。

2.3.2.5 强制推送(覆盖远程分支)
git push --force origin main:main
  • 使用 --force(或 -f)强制覆盖远程分支(谨慎使用!)。
2.3.2.6 设置默认推送

git push -u origin 分支名(绑定后可直接用 git push)

git push -u origin "main"

或者直接:

git push 

在这里插入图片描述

2.3.2.7 推送所有分支
  • 使用 --all 推送所有本地分支:
git push --all origin

2.3.3 查看关联的远程仓库

git remote -v

在这里插入图片描述

2.3.4 删除已关联的远程仓库

git remote remove origin

执行完成再次查看一下远程仓库。发现没有了,就成功了。
在这里插入图片描述

2.3.5 拉取远程仓库

git pull <远程仓库名> <远程分支名>

这⾥的远程仓库名,通常是origin,表⽰默认的远程仓库。⽽远程分⽀名,通常是main或master,表⽰远程仓库的分⽀。

git pull origin main

当然,很多时候我们会省略掉远程仓库和分⽀名,git pull会默认从你当前分⽀所关联的远程仓库和分⽀中拉取更新。

2.3.6 实际工作流示例

场景:将本地开发分支推送到远程仓库
  1. 查看本地分支和远程状态:

    git branch -v      # 查看本地分支
    git remote -v      # 查看远程仓库
    
  2. 推送本地分支到远程(假设远程分支名与本地相同):

    git push origin dev:dev
    
  3. 如果远程分支不存在:

    # 首次推送时需指定远程分支名
    git push --set-upstream origin dev:dev
    # 后续推送可简化为
    git push origin dev
    

    本地和远程都没有dev分支,我先在本地创建一个分支dev,之后推送到远程仓库,由于远程仓库也没有这个分支,所以使用这个命令 git push --set-upstream origin dev:dev

    在这里插入图片描述

  4. 如果推送失败(因远程有更新):

    git pull origin dev   # 先拉取远程变更
    git push origin dev   # 重新推送
    

本文结束,欢迎点赞、收藏、转发、关注!

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

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

相关文章

悬赏任务网站源码多平台兼职赚钱搭建图解

功能详细说明 &#xff08;一&#xff09;登录与注册 1、登录&#xff1a;打开系统用户端&#xff0c;输入已注册的手机号和密码进行登录。 若为忘记密码&#xff0c;可通过 “找回密码” 功能&#xff0c;按提示验证身份后重置密码登录。 2、注册&#xff1a;点击 “注册” 按…

Node.js简介及安装

一、Nodejs简介 1、核心定义 Node.js 是一个基于 Chrome V8 引擎的开源、跨平台 JavaScript 运行时环境&#xff08;Runtime&#xff09;&#xff0c;用于在服务器端或本地运行 JavaScript 代码。它并非编程语言、库或框架&#xff0c;而是扩展了 JavaScript 的能力&#xff0…

KINGBASE集群日常维护管理命令总结

查看集群的状态 [kingbasenode1 bin]$ repmgr cluster show查看守护集群状态 [kingbasenode1 bin]$ repmgr service status查看集群的事件 [kingbasenode1 etc]$ repmgr cluster event查看集群流复制状态 esrep#select usename,application_name,client_addr,sync_state,state,…

GoLand 调参高手都在用的配置!续集:WebStorm 飞升后,Go 开发 IDE 性能炸裂的秘密

“为什么别人的 GoLand 运行 Go 项目丝滑流畅&#xff0c;而你的却频繁卡顿、编译转圈&#xff1f;秘密就藏在这个 goland64.exe.vmoptions文件里&#xff01;作为 IDEA/PyCharm/WebStorm 调优系列的续集&#xff0c;我把我压箱底的 ​GoLand 性能调优参数表​ 分享出来—>&…

48Days-Day19 | ISBN号,kotori和迷宫,矩阵最长递增路径

ISBN号 ISBN号码_牛客题霸_牛客网 算法原理 模拟&#xff0c;根据题意模拟就可以了&#xff0c;注意一下余数为10的时候要特别判断一下是不是X就行了 代码 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public stat…

Java 泛型类型擦除

&#x1f4d6; 概述 本文档详细解释了 Flink 中 TypeInformation 的作用、原理和使用方法&#xff0c;帮助理解为什么 Flink 需要显式的类型信息。 &#x1f3af; 核心问题&#xff1a;Java 泛型类型擦除 什么是类型擦除&#xff1f; Java 在编译时会将泛型信息擦除&#xff0c…

从“写代码”到“定义需求”:AI编程工具如何重构软件开发的核心流程?

从“写代码”到“定义需求”&#xff1a;AI编程工具如何重构软件开发的核心流程&#xff1f; 软件开发的核心流程正在经历一场静默革命。十年前&#xff0c;开发者的日常被“写代码”填满——从变量定义到逻辑实现&#xff0c;每行代码都需要手动敲击&#xff1b;而今天&#x…

一颗TTS语音芯片给产品增加智能语音播报能力

​一颗TTS语音芯片给产品增加智能语音播报能力传统语音播报芯片可以设置一些固定的语音片段或者内容&#xff0c;但是对于现在各种创新产品层出不穷的时代&#xff0c;传统的语音播报芯片能力似乎有点不够用了。而TTS语音合成芯片&#xff0c;正在逐渐登上舞台中央。TTS语音合成…

[免费]基于Python的影视数据可视化分析系统(Flask+echarts)【论文+源码+SQL脚本】

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的影视数据可视化分析系统(Flaskecharts)&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的爱奇艺影视电影数据可视化分析系统(Flaskecharts) Python毕业设计_哔哩哔哩_bilibili 系统…

Three.js 材质系统深度解析

简介 Three.js 是一个功能强大的开源 3D 图形库&#xff0c;广泛应用于 Web 端的 3D 可视化开发。其材质系统是 Three.js 的核心组成部分之一&#xff0c;负责定义 3D 对象的表面外观和渲染效果。从简单的颜色填充到复杂的动态效果&#xff0c;材质系统为开发者提供了高度灵活…

FP16(半精度)和FP32(单精度)

FP16&#xff08;Half-Precision Floating Point&#xff0c;半精度浮点数&#xff09;是一种使用16位二进制数表示浮点数值的数据格式&#xff0c;在深度学习、图形渲染和高性能计算中广泛应用。其核心定义、技术特性与应用价值如下&#xff1a;一、FP16的核心定义与结构二进制…

基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js

基于Vue Node能源采购系统的设计与实现/基于express的能源管理系统#node.js

代码管理系统简介与部署

目录版本控制1&#xff1a;版本控制概念2&#xff1a;版本控制的功能&#xff08;1&#xff09;检入检出控制&#xff08;2&#xff09;分支和合井&#xff08;3&#xff09;历史记录3&#xff1a;版本控制的流程&#xff08;1&#xff09;创建配置项。&#xff08;2&#xff0…

Pandas数据结构详解Series与DataFrame

Pandas数据结构详解&#xff1a;Series与DataFrame实战指南 前言 Pandas是Python数据分析的核心库&#xff0c;其强大的数据处理能力主要基于两种核心数据结构&#xff1a;Series和DataFrame。本文将深入解析这两种数据结构的概念、创建方式、常用属性和方法&#xff0c;并通…

TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践

一、TensorRT-LLM有三种安装方式&#xff0c;从简单到难 1.NGC上的预构建发布容器进行部署,见《tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B》。 2.通过pip进行部署。 3.从源头构建再部署。 在实际开发中&#xff0c;我们常常面临这样的场景&#xff1a;本地笔记…

完整、可落地的 Elasticsearch 拼音补全配置模板 设计方案

在中文搜索场景中&#xff0c;用户经常使用拼音输入&#xff08;如 “iPhone”、“pingguo”&#xff09;来搜索中文内容&#xff08;如“苹果手机”&#xff09;。为了提升用户体验&#xff0c;Elasticsearch 可通过 拼音分词器 Completion Suggester 实现 拼音补全&#xff…

Redis面试精讲 Day 23:Redis与数据库数据一致性保障

【Redis面试精讲 Day 23】Redis与数据库数据一致性保障 在“Redis面试精讲”系列的第23天&#xff0c;我们将深入探讨Redis与数据库数据一致性保障这一在高并发分布式系统中极为关键的技术难题。该主题是面试中的高频压轴题&#xff0c;常出现在中高级后端开发、架构师岗位的考…

HTML <link rel=“preload“>:提前加载关键资源的性能优化利器

在网页性能优化中&#xff0c;“资源加载时机”是影响用户体验的关键因素——一个延迟加载的核心CSS可能导致页面“闪白”&#xff0c;一段未及时加载的关键JS可能让交互按钮失效。传统的资源加载方式&#xff08;如<link>加载CSS、<script>加载JS&#xff09;依赖…

WPF加载记忆上次图像

问题点使用MVVM先viewModel构造函数然后才Loaded事件,但Loaded事情时halcon控件没有加载完毕。Window_ContentRendered事件中halcon控件才有了句柄。解决问题1.viewModel函数中调用相机的类获取相机名(在这里是为了MVVM中以后可以做其它的事情如识别二维码)2.在Window_ContentR…

AT89C52单片机介绍

目录 1AT89C52原理图及结构框图 1.1 原理图 1.2 AT89C52 结构框图 1.2.1 8 位 CPU 1.2.2 存储器 1.2.3 I/O 端口 1.2.4 定时器 / 计数器 1.2.5 串行通信接口 1.2.6 中断系统 1.2.7 时钟与复位 1.2.8 总线结构 1.2.9 特殊功能寄存器区 2 AT89C52引脚介绍(PDIP) …