Gitgit

目录

什么是Git?

[Git 的主要功能包括:](#Git 的主要功能包括:)

Git工作区、暂存区、版本库:

常用命令:

[1.git init --初始化一个新的本地仓库](#1.git init --初始化一个新的本地仓库)

[2.git config --配置 name 和email](#2.git config --配置 name 和email)

[3.git add : 将工作区修改的内容(增、删、改)添加到 暂存区中](#3.git add : 将工作区修改的内容(增、删、改)添加到 暂存区中)

[4.git commit : 将暂存区内容提交到master](#4.git commit : 将暂存区内容提交到master)

[5.git log : 会按时间倒序(最新在前)列出当前分支的所有提交记录,帮助你了解项目是如何一步步演变的](#5.git log : 会按时间倒序(最新在前)列出当前分支的所有提交记录,帮助你了解项目是如何一步步演变的)

[6.git cat-file : 是 Git 中一个底层(plumbing)命令,用于查看 Git 对象的内容或信息。它主要用于调试、检查仓库内部结构,或理解 Git 如何存储数据。](#6.git cat-file : 是 Git 中一个底层(plumbing)命令,用于查看 Git 对象的内容或信息。它主要用于调试、检查仓库内部结构,或理解 Git 如何存储数据。)

[7.git status : 是 Git 中最常用、最实用的命令之一,用于查看工作区和暂存区的当前状态。它能告诉你:](#7.git status : 是 Git 中最常用、最实用的命令之一,用于查看工作区和暂存区的当前状态。它能告诉你:)

[8.git diff : 是 Git 中用于查看文件差异(differences)的核心命令。它能帮你清晰地看到:](#8.git diff : 是 Git 中用于查看文件差异(differences)的核心命令。它能帮你清晰地看到:)

[9.git reset : 是 Git 中一个强大但需谨慎使用的命令,主要用于移动 HEAD 指针、重置暂存区(index)和/或工作目录到某个指定状态。它常用于撤销提交、取消暂存文件或丢弃更改。](#9.git reset : 是 Git 中一个强大但需谨慎使用的命令,主要用于移动 HEAD 指针、重置暂存区(index)和/或工作目录到某个指定状态。它常用于撤销提交、取消暂存文件或丢弃更改。)

[10、git branch:查看/创建/删除分支](#10、git branch:查看/创建/删除分支)

11.合并分支

[12.git clone:是 Git 中用于复制远程仓库到本地的命令。](#12.git clone:是 Git 中用于复制远程仓库到本地的命令。)

[13.git tag :对commit进行打标签](#13.git tag :对commit进行打标签)

[14.git show : 可以查看标签的信息](#14.git show : 可以查看标签的信息)

[撤销修改:主要目的不影响远程仓库,所以撤销的大前提是没有git push](#撤销修改:主要目的不影响远程仓库,所以撤销的大前提是没有git push)

删除文件:

分支管理:

查看分支:

创建分支:

切换分支:

合并分支:

删除分支:需要在其他分支上删除分支

合并冲突问题:

一、为什么会发生合并冲突?

二、冲突的表现形式

三、如何解决冲突?

[步骤 1:编辑冲突文件](#步骤 1:编辑冲突文件)

[步骤 2:标记冲突已解决](#步骤 2:标记冲突已解决)

[步骤 3:完成合并](#步骤 3:完成合并)

临时保存当前工作目录和暂存区的修改,而不进行提交:

一、基本用法

[1. 保存当前修改(压入 stash)](#1. 保存当前修改(压入 stash))

[2. 查看 stash 列表](#2. 查看 stash 列表)

[3. 恢复 stash(弹出或应用)](#3. 恢复 stash(弹出或应用))

[方式一:恢复并删除 stash(推荐常用)](#方式一:恢复并删除 stash(推荐常用))

[方式二:恢复但保留 stash](#方式二:恢复但保留 stash)

[4. 删除 stash](#4. 删除 stash)

远程操作:

[拉取远程仓库:git clone](#拉取远程仓库:git clone)

[管理远程仓库:git remote](#管理远程仓库:git remote)

[将本地仓库中的修改推送至远程仓库:git push](#将本地仓库中的修改推送至远程仓库:git push)

[将远程仓库内容拉取到本地:git pull](#将远程仓库内容拉取到本地:git pull)

[仓库配置的 .gitignore 文件](#仓库配置的 .gitignore 文件)

标签管理:

创建标签:

查看标签:

删除标签:

推送标签到远程仓库:

删除远程仓库标签:


什么是Git?

Git 是一个分布式版本控制系统 (Distributed Version Control System, DVCS),用于跟踪和管理代码(或其他文件)的变更历史。它最初由 Linux 内核的创始人 Linus Torvalds 在 2005 年开发,目的是为了更好地管理 Linux 内核的开发协作。

Git 的主要功能包括:

  1. 版本控制

    • 记录文件每一次的修改,可以随时回退到任意历史版本。
    • 每次提交(commit)都会生成一个唯一的标识(哈希值),便于追踪。
  2. 分支管理

    • 支持创建多个分支(branch),方便并行开发不同功能或修复不同 bug。
    • 分支之间互不影响,合并(merge)操作也相对安全高效。
  3. 分布式协作

    • 每个开发者都拥有完整的代码仓库(包括完整历史),不依赖中央服务器也能工作。
    • 可以轻松与他人共享更改、拉取(pull)或推送(push)代码。
  4. 数据完整性

    • Git 使用 SHA-1 哈希算法确保文件内容不会被意外或恶意篡改。
    • 所有操作几乎都是本地进行,速度快且可靠。

Git工作区、暂存区、版本库:

  • **工作区:**就是你在电脑里能看到的目录。
  • **暂存区:**英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • **版本库:**工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

如何将一个文件用git管理起来:

1、git add 将工作区修改的内容(增、删、改)添加到 暂存区中

2、git commit 将暂存区内容提交到master

objects:对象库 里面存储了一堆的 git 对象

add的同时在objects生成git对象,修改的工作区内容会写入对象库的一个新的对git象中,而这里面的一个个不同的对象就相当于不同的版本,自然而然就达到了版本管理的效果

暂存区和master:存的是git对象的索引

Head则指向不同的master分支,访问不同的git对象

常用命令:

1.git init --初始化一个新的本地仓库

执行命令后会生成一个 .git 版本库,注意不要对其进行修改

2.git config --配置 name 和email

初始化之后对name和email进行配置,否则后续可能会出现一些报错

通过 git config -l 可对配置信息进行查看

也可通过 git config --unset user.name/... 对配置信息进行删除

一台机器可能有多个git仓库,此时可以使用 --global 选项对所有仓库进行一键配置

bash 复制代码
#例如
git config --global user.name "tyx"

3.git add : 将工作区修改的内容(增、删、改)添加到 暂存区中

bash 复制代码
git add filename

4.git commit : 将暂存区内容提交到master

5.git log : 会按时间倒序(最新在前)列出当前分支的所有提交记录,帮助你了解项目是如何一步步演变的

git reflog : 本地记录

6.git cat-file : 是 Git 中一个底层(plumbing)命令 ,用于查看 Git 对象的内容或信息。它主要用于调试、检查仓库内部结构,或理解 Git 如何存储数据。

bash 复制代码
git cat-file <选项> <对象>

7.git status : 是 Git 中最常用、最实用的命令之一,用于查看工作区和暂存区的当前状态。它能告诉你:

  • 哪些文件被修改了但还没暂存(unstaged)
  • 哪些文件已暂存(staged),准备下次提交
  • 哪些文件是新增的、未被跟踪的(untracked)
  • 当前位于哪个分支
  • 是否有未完成的合并或变基操作

8.git diff : 是 Git 中用于查看文件差异(differences)的核心命令。它能帮你清晰地看到:

  • 工作区 vs 暂存区(默认)
  • 暂存区 vs 最近一次提交
  • 任意两次提交之间的变化
  • 不同分支之间的代码差异
bash 复制代码
git diff [file]   //命令用来显示暂存区和工作区文件的差异

git diff HEAD -- [file]   //查看版本库和工作区文件的区别

9.git reset : 是 Git 中一个强大但需谨慎使用 的命令,主要用于移动 HEAD 指针、重置暂存区(index)和/或工作目录到某个指定状态。它常用于撤销提交、取消暂存文件或丢弃更改。

10、git branch:查看/创建/删除分支

bash 复制代码
# 查看本地所有分支
git branch

# 查看所有分支(包括远程)
git branch -a
bash 复制代码
# 创建一个新分支(但不切换)
git branch <branch-name>

# 创建并切换到新分支
git checkout -b <branch-name>
# 或者使用较新的命令(Git 2.23+)
git switch -c <branch-name>
bash 复制代码
# 删除已合并的分支
git branch -d <branch-name>

# 强制删除未合并的分支
git branch -D <branch-name>

git branch -vv : 查看本地和远程分支建立连接的情况

11.合并分支

bash 复制代码
# 假设你在 main 分支上,想合并 feature 分支
git checkout main
git merge feature

12.git clone:是 Git 中用于复制远程仓库到本地的命令。

不能在本地仓库所在目录下执行

13.git tag :对commit进行打标签

14.git show : 可以查看标签的信息

15、git checkout -b [dev] [origin/dev]:建立远程分支和本地分支的连接

撤销修改:主要目的不影响远程仓库,所以撤销的大前提是没有git push

情况一:不要这些修改了,请把文件变回上次提交的样子,只撤销工作区

解决办法:1、手动修改 2、git checkout -- [file]

情况二:工作区和暂存区都要撤销

解决办法:git reset

情况三:工作区、暂存区、版本库都要撤销

解决办法:git reset

删除文件:

1、rm file -> git add -> git commit

2、git rm file -> git commit

分支管理:

在 Git 中,分支 (Branch) 是一个轻量级、可移动的指针,指向某次提交(commit)。它让你可以在不影响主线开发的情况下,独立地进行功能开发、 bug 修复、实验等操作。

HEAD可以指向任一分支,被指向的分支就是当前的工作分支,这时的add、commit都是对这一条被指向的分支进行操作的

查看分支:

bash 复制代码
# 查看本地所有分支
git branch

# 查看所有分支(包括远程)
git branch -a

创建分支:

bash 复制代码
# 创建一个新分支(但不切换)
git branch <branch-name>

# 创建并切换到新分支
git checkout -b <branch-name>
# 或者使用较新的命令(Git 2.23+)
git switch -c <branch-name>

切换分支:

bash 复制代码
git checkout <branch-name>
# 或
git switch <branch-name>

合并分支:

bash 复制代码
# 假设你在 main 分支上,想合并 feature 分支
git checkout main
git merge feature

删除分支:需要在其他分支上删除分支

bash 复制代码
# 删除已合并的分支
git branch -d <branch-name>

# 强制删除未合并的分支
git branch -D <branch-name>

合并冲突问题:

在 Git 中,合并冲突(Merge Conflict) 是指在执行 git mergegit rebasegit pull 时,Git 无法自动决定如何整合两个分支对同一文件同一区域的不同修改。这时就需要你手动解决冲突

一、为什么会发生合并冲突?

当两个分支对同一个文件的同一行(或相邻行) 做了不同的修改,Git 无法判断哪个版本是"正确"的,就会标记为冲突。

例如:

  • 你在 feature 分支修改了 app.js 的第 10 行为 console.log("A");
  • 同时别人在 main 分支把第 10 行改成了 console.log("B");
  • 当你尝试把 feature 合并到 main 时,Git 就会报冲突。

二、冲突的表现形式

当你执行 git mergegit pull 后,如果出现冲突,Git 会提示:

此时,用 git status 可以看到冲突的文件处于 "unmerged" 状态。

打开冲突文件,你会看到类似这样的标记:

  • <<<<<<< HEAD=======:当前分支的内容
  • =======>>>>>>> feature:要合并分支的内容

三、如何解决冲突?

步骤 1:编辑冲突文件

手动决定保留哪一部分,或者融合两者。例如:

删除所有冲突标记<<<<<<<, =======, >>>>>>>)。

步骤 2:标记冲突已解决

步骤 3:完成合并

注意:如果是 rebase 冲突,解决后使用 git rebase --continue

**临时保存当前工作目录和暂存区的修改,**而不进行提交:

这在你需要切换分支、拉取更新或处理紧急任务但又不想提交不完整代码时特别有用

一、基本用法

1. 保存当前修改(压入 stash)

  • 会将 已跟踪文件 的修改(包括工作区和暂存区)保存到一个"stash 堆栈"中。
  • 执行后,工作目录会恢复到 HEAD 状态(干净状态)。
  • 默认消息为:WIP on <branch>: <commit-message>

⚠️ 注意:未跟踪的文件(untracked files)默认不会被 stash ,除非加 -u 参数。

2. 查看 stash 列表

3. 恢复 stash(弹出或应用)

方式一:恢复并删除 stash(推荐常用)
  • 默认恢复最新的 stash(stash@{0}
  • 恢复成功后自动从 stash 列表中删除
方式二:恢复但保留 stash
  • 适用于你想多次尝试恢复,或保留备份

4. 删除 stash

远程操作:

拉取远程仓库:git clone

管理远程仓库:git remote

它主要用于查看、添加、重命名或删除与本地仓库关联的远程仓库。

将本地仓库中的修改推送至远程仓库:git push

操作的句柄是 分支

在推送前要确保本地的user.name 和 user.email 与远程仓库的一样

将远程仓库内容拉取到本地:git pull

是 Git 中用于从远程仓库获取最新更改并合并到当前本地分支的命令。它实际上是两个操作的组合:

仓库配置的 .gitignore 文件

可以在 git add . 时对一些不想提交的文件进行忽略

git check-ignore -v d.so 可以查看一个文件被忽略的原因

标签管理:

如果你达到一个重要的阶段,并希望永远记住提交的快照,你可以使用 git tag 给它打上标签。

标签可以简单的理解为对某次提交commit的一个标识,相当于起了一个别名

创建标签:

bash 复制代码
git tag <tagname>

默认是对最新的一次commit进行打标签,如果想指定,可以加上指定的commit id

bash 复制代码
git tag -a v1.0 // -a 选项可以添加注解:

git tag -a v1.0 -m "Release version 1.0"

查看标签:

bash 复制代码
git tag   //列出所有标签

git show <tagname>  //查看某个标签详细信息

删除标签:

bash 复制代码
git tag -d <tagname>

git tag -d v1.0

推送标签到远程仓库:

bash 复制代码
git push origin <tagname>

推送所有标签:

git push origin --tags

删除远程仓库标签:

bash 复制代码
git push origin --delete <tagname>
相关推荐
laocooon5238578861 小时前
win下制作一个简单的Cmake,完成运行效果
linux·运维·服务器
北顾南栀倾寒1 小时前
[杂学笔记]HTTP与HTTPS的区别、HTTPS进行TLS握手的过程、HTTPS如何防止中间人攻击、HTTP1.1与HTTP2.0的区别、TCP的拥塞控制
linux·服务器
无心水1 小时前
【Python实战进阶】7、Python条件与循环实战详解:从基础语法到高级技巧
android·java·python·python列表推导式·python条件语句·python循环语句·python实战案例
一点★1 小时前
“equals”与“==”、“hashCode”的区别和使用场景
java·开发语言
拾忆,想起1 小时前
Dubbo服务超时与重试策略配置指南:构建 resilient 微服务架构
服务器·网络·微服务·云原生·架构·dubbo
N***H4861 小时前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
程小k2 小时前
迷你编译器
c++·编辑器
s***w1122 小时前
SpringMVC新版本踩坑[已解决]
java
老李头喽2 小时前
走进单元测试
java·单元测试