Git基本操作命令

发布于:2025-05-13 ⋅ 阅读:(11) ⋅ 点赞:(0)

Git基本操作命令

  • 放两张图便于理解
  • 第一张图,是只有本地仓库的相关操作,对文件的增删改、提交、撤销等

在这里插入图片描述

  • 第二张图,是将远程仓库包含进来

在这里插入图片描述

创建仓库命令

# 初始化一个仓库
git init
# 从远程服务器上克隆一个仓库,其实也相当于下载一个仓库
git clone 远程仓库的地址

提交与修改

# 将文件添加到暂存区
# 可以使用通配符,例如:git add *.txt
# 可以使用目录,例如:git add . # 表示添加当前目录下已经修改的文件
git add 

# 查看当前仓库的状态,是否有文件更改
git status

# git diff 比较文件的不同,即暂存区和工作区的差异
git diff:比较工作区和暂存区中的文件差异
git diff --cache:比较暂存区和本地仓库的文件差异
git diff HEAD(本地仓库的历史提交ID,此处使用HEAD作为事例):比较工作区和本地仓库的文件差异
git diff ID1 ID2:比较本地仓库的两个版本之间的差异

# 使用外部差异工具查看和比较文件的更改
git difftool

# 比较两个提交范围之间的差异
git range-diff

# 提交暂存区中的文件到本地仓库
# 只提交暂存区中的内容,不会提交工作区中的内容
git commit -m "commit message"

提交日志

# 查看仓库提交历史记录
# 可以在该命令后添加 --oneline 参数来查看简洁的提交记录
# 更高级的图形化显示参数 --all --graph --oneline --decorate
git log

# 列表形式查看指定文件的历史修改记录
git blame <file>

# 简洁日志摘要
git shortlog

# 生成一个可读的字符串
git describe

版本回退

git reset

  • 三种不同的参数模式
    • –soft:表示回退到某一个版本,并且保留工作区和暂存区中所有修改的内容
    • –hard:表示回退到某一个版本,并且丢弃工作区和暂存区中所有修改的内容
    • –mixed:介于soft和hard之间,表示保留工作区,但是丢弃暂存区中的内容

分支切换

# 使用场景:多人协作开发

# 查看分支列表
git branch

# 创建分支
git branch branch-name

# 切换分支
git checkout branch-name
# 更加推荐使用
git switch branch-name

# 合并分支
git merge branch-name

# 删除分支
git branch -d branch-name # 已合并
git branch -D branch-name # 未合并

删除文件

# 先从工作区删除文件,然后再将删除的内容添加到暂存区
rm file
git add file

# 把文件从工作区和暂存区同时删除
git rm file

# 把文件从暂存区删除,但保留在当前工作区中
git rm --cached file

# 递归删除某个目录下的所有子目录和文件
git rm -r *

# 以上操作都需要进行commit提交

.gitignore文件

  • 作用:自动忽略掉不需要被提交到版本库中的文件
    • 日志文件、文件夹
    • .class文件
    • .o文件
    • .env文件
    • .zip和tar文件
    • .pem文件
    • 等等
  • 匹配规则
    • 空行或者亿#开头的行会被Git忽略。一般空行用于可读性的分割,#一般用作注释
    • 使用标准的blob模式匹配,例如:
      • 星号**通配任意个自负
      • 问号?匹配单个自负
      • 中括号[]表示匹配列表中的单个字符,比如:[abc]表示a/b/c
    • 两个星号**表示匹配任意的中间目录
    • 中括号可以使用短中线连接,比如:
      • [0-9]表示任意一位数字,[a-z]表示任意一位小写字母
    • 感叹号 ! 表示取反
# 忽略所有的.a文件
*.a
# 但跟踪所有的lib.a,即便你在前面忽略了.a文件
!lib.a
# 忽略任何目录下名位build的文件夹
build/
# 忽略doc/notes.txt,但不忽略/doc/server/arch.txt
doc/*.txt
# 忽略doc/目录及其所有子目录下的.pdf文件
doc/**/*.pdf

远程操作

# 远程仓库操作
git remote

# 从远程获取代码库
git fetch

# 下载远程代码并合并
git pull

# 上传远程代码并合并
git push

# 管理子仓库
git submodule

Git分支管理

关于git分支功能是Git强大的功能之一,可以让多个开发人员协作并行工作,开发新功能、修改bug,并最终汇集到主分支上。每一个分支都代表着一条独立的开发线路。关于git分支管理,有两个工作流模式,一个叫做Gitflow工作流,一个叫做Github工作流

  • Gitflow工作流(比较复杂,不适合持续集成,适合团队人数较多的情况)
    • 功能分支(Feature):开发人员以功能名称命名一个分支,独立于其他分支进行开发工作,完成开发后合并入共享开发分支。
    • 共享开发分支(Develop):用于集成多个功能分支,一个版本全部功能开发完成后,可以拉出发布分支进行发布,而共享开发分支可以继续进行下一个版本的开发工作。
    • 发布分支(Release):用于保存发布过程中产生的代码修改,发布后会将代码合并到共享开发分支和主分支。
    • 热修复分支(Hotfix):当某个正式版本出现紧急 bug 需要修复时,从主分支的对应版本拉出 Hotfix 分支,进行紧急修复,发布后,合并回主分支。
    • 主分支(Master):用于保存所有发布的版本。

在这里插入图片描述

  • Github工作流(相对Gitflow工作流简单,适合团队人数较少的情况)

在这里插入图片描述

除了以上两种工作流模式外,还有GitLab Flow工作流。关于工作流模式此处不再详细介绍。

创建分支

# 创建新分支并切换到该分支
git checkout -b branch-name

# 切换分支
git checkout branch-name

查看分支

# 查看所有分支
git branch

# 查看远程分支
git branch -r

# 查看所有本地分支和远程分支
git branch -a

合并分支

# 将其他分支合并到当前分支
git merge branch-name(其他分支名)

# 在合并的时候,出现合并冲突的文件,需要手动解决冲突,在解决完冲突后,需要重新提交该冲突文件
git add <confict-file>
git commit 

删除分支

# 删除本地分支
git branch -d branch-name

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

# 删除远程分支
git push origin --delete branch-name

保存当前文件未提交更改并切换分支

# 保存当前工作目录中的未提交更改,并将其恢复到干净的工作区
git stash
# 恢复最近保存的更改
git stash pop
# 列出所有保存的更改
git stash list

Git提交历史

  • git log
    • 查看历史提交记录
  • git blame
    • 以列表形式查看指定文件的历史修改记录

命令:git log [选项] [分支名/提交哈希]

常用的选项包括:

  • -p:显示提交的补丁(具体更改内容)。
  • --oneline:以简洁的一行格式显示提交信息。
  • --graph:以图形化方式显示分支和合并历史。
  • --decorate:显示分支和标签指向的提交。
  • --author=<作者>:只显示特定作者的提交。
  • --since=<时间>:只显示指定时间之后的提交。
  • --until=<时间>:只显示指定时间之前的提交。
  • --grep=<模式>:只显示包含指定模式的提交消息。
  • --no-merges:不显示合并提交。
  • --stat:显示简略统计信息,包括修改的文件和行数。
  • --abbrev-commit:使用短提交哈希值。
  • --pretty=<格式>:使用自定义的提交信息显示格式。

命令:git blame [选项] <文件路径>

常用的选项包括:

  • -L <起始行号>,<结束行号>:只显示指定行号范围内的代码注释。
  • -C:对于重命名或拷贝的代码行,也进行代码行溯源。
  • -M:对于移动的代码行,也进行代码行溯源。
  • -C -C-M -M:对于较多改动的代码行,进行更进一步的溯源。
  • --show-stats:显示包含每个作者的行数统计信息。

恢复和回退

Git提供了多种方法来恢复和回退到之前的版本,不同的命令适用于不同的场景和需求

以下是几种常见的方法

  • git checkout:切换分支或恢复文件到指定提交。
  • git reset:重置当前分支到指定提交(软重置、混合重置、硬重置)。
  • git revert:创建一个新的提交以撤销指定提交,不改变提交历史。
  • git reflog:查看历史操作记录,找回丢失的提交。

1、git checkout:检查出特定版本的文件

git checkout 命令用于切换分支或恢复工作目录中的文件到指定的提交

恢复工作目录中的文件到某个提交

# 将filename恢复到commit-id提交时的版本
git checkout <commit-id> -- <filename>

切换到特定提交

git checkout <commit-id>

2、git reset重置当前分支到特定提交

git reset命令可以更改当前分支的提交历史,它有三种主要模式:--soft--mixed--hard

  • –soft:只重置HEAD到指定的提交,暂存区和工作目录保持不变
git reset --soft <commit>
  • –hard:重置HEAD到指定的提交,暂存区和工作目录都重置
git reset --hard <commit>
  • –mixed:重置HEAD到指定的提交,暂存区重置,但工作目录保持不变
git reset --mixed <commit>

3、git revert:撤销某次提交

git revert命令创建一个新的提交,用来撤销指定的提交,它不会改变提交历史,适用于已经推送到远程仓库的提交

git revert <commit>

4、git reflog:查看历史操作记录

git reflog:命令记录了所有HEAD的移动。即使提交被删除或重置,也可以通过reflog找回

git reflog

Git标签

Git标签(Tag)用于给定仓库中的特定提交点加上标记,通常用于发布版本。比如你手里有一个项目完成了第一个阶段的功能,可以标记为v1.0版本,可以使用git tag -a v1.0命令给最新的一次提交打上v1.0的标签

  • -a 选项意思为创建一个带注解的标签

标签语法格式如下

git tag tag-name

标签推送

默认情况下,git push不会推送标签,需要显式推送标签

git push origin tag-name

# 推送所有标签
git push origin --tags

删除标签

# 本地删除
git tag -d tag-name

# 远程删除
git push origin --delete tag-name

附注标签

附注标签存储了创建的名字、Email等信息,附注更为正式,适用于需要额外元数据的场景

附注标签语法如下

git tag -a tag-name -m "message"

# PGP签名标签命令
git tag -s tag-name -m "message"

查看标签信息

git show tag-name

删除标签

# 本地删除
git tag -d v1.0

# 远程删除
git push origin --delete v1.0

网站公告

今日签到

点亮在社区的每一天
去签到