Git概述

  • Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。
  • 作用
    1. 代码回溯
    2. 版本切换
    3. 多人协作
    4. 远程备份

简介

  • Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种:
    1. 本地仓库:开发人员自己电脑上的Git仓库
    2. 远程仓库:远程服务器上的Git仓库
  • commit:提交。将本地文件和版本信息保存到本地仓库
  • push:推送,将本地仓库文件和版本信息上传到远程仓库
  • pull:拉取,将远程仓库文件和版本信息瞎啊滋到本地仓库

Git常用命令

命令功能
git config —global user.name 用户名设置用户签名
git config —global user.email 邮箱设置用户签名
git init初始化本地库
git status查看文件状态
git add [文件名称]将文件的修改加入暂存区
git reset [文件名称]将暂存区的文件取消暂存
git reset —hard [版本号]切换到指定版本
git commit [文件名]将暂存区文件提交到版本库中
git commit -m “日志信息”将暂存区的文件提交到版本库中
git log查看日志
git reflog查看历史记录
命令功能
git remote查看远程仓库
git remote -v查看当前所有远程地址别名
git remote add [short-name] [url]添加远程仓库
git remote rm [short-name]移除远程仓库
git clone [url]从远程仓库克隆
git pull [short-name] [branch-name]从远程仓库拉取
git push [short-name] [branch-name]推送到远程仓库
命令功能
git branch查看分支:列出本地的所有分支
git branch -r查看分支:列出所有的远程分支
git branch -a查看分支:列出所有的本地分支和远程分支
git branch [branch-name]创建分支
git checkout [branch-name]切换分支
git push [short-Name] [branch-name]推送至远程仓库分支
git merge [branch-name]合并分支
git branch -d [branch-name]删除分支
git branch -D [branch-name]删除分支(即使该分支中进行了一些开发动作)
git push [short-Name] –d [branch-name]删除远程仓库中的分支

初始化

  • 初始化设置用户名和邮箱
    1
    2
    git config --global user.name "yourname"
    git config --global user.email "youremail@example.com"
    • —global:全局配置,对所有仓库生效
    • —system: 系统配置,对所有用户生效
    • 默认(local):只对本地仓库有效config

签名的作用是为了区分不同操作者的身份,以确认在每个版本的提交信息中能够看到是谁提交的,git首次安装必须填写用户签名,否则无法提交代码

  • 查看配置信息命令
    1
    git config --list
    通过该命令设置的信息都保存在~/.gitconfig文件中

创建仓库

  • 在本地初始化一个新的Git仓库(不常用)
    1
    2
    # 省略参数时,默认创建在当前目录下
    git init <仓库名称>
  • 下载一个远程存在的仓库(常用)
    1
    git clone <远程仓库地址>

    仓库不能嵌套,因此必须在一个不被git管理的目录下克隆/创建仓库

工作区域和文件状态

工作区域

  1. 工作区(Working Directory / Working Tree)

存放当前正在编辑、查看的项目文件。

  • 就是你电脑上看到的文件夹内容。
  • 修改文件后,它们处于已修改(modified)状态。
  • 工作区是从本地仓库中某个提交版本检出的副本。
  1. 暂存区(Staging Area / Index)

    临时保存即将提交的变更。

    • 当执行 git add <file> 时,修改会被放入暂存区。
    • 暂存区记录了下一次提交所包含的文件快照
    • 实际上,它是 .git/index 文件。
  2. 本地仓库(Local Repository)

    保存了项目的完整历史记录(所有提交、分支、标签等)。

    • 位于 .git/ 目录中。
    • 当执行 git commit 时,Git 会把暂存区的内容保存为一个新的提交对象(commit)到本地仓库。
  3. 远程仓库(Remote Repository)

    托管在远程服务器(如 GitHub、GitLab、Gitee)上的仓库。

    • 通过网络与本地仓库同步(git pushgit pull)。
    • 通常多人协作时使用。
区域说明关键命令
工作区你看到和编辑的文件git status
暂存区临时保存将要提交的修改git add
本地仓库保存所有历史提交git commit
远程仓库服务器上的共享仓库git push / pull

文件状态

状态说明典型命令
未追踪(Untracked)Git 未跟踪的文件git add
已暂存(Modified)工作区修改但未暂存git addgit restore
已暂存(Staged)已暂存等待提交git commitgit restore --staged
已提交(Committed)已提交到本地仓库git log 查看

基本概念

  • main:默认主分支
  • origin:默认远程仓库
  • HEAD:指向当前所在的分支或提交
  • HEAD^:上一个版本
  • HEAD~4:倒数第四个版本(可以是任意数字)

特殊文件

  • .git: Git仓库的元数据和对象数据库
  • .gitignore: Git忽略文件列表,用于指定哪些文件或目录不被 Git 跟踪。
  • .gitattributes:指定文件的属性,比如换行符
  • .gitkeep:使空目录被提交到仓库
  • .gitmodules:如果项目包含子模块,这个文件会记录子模块的信息。
  • .gitconfig:用户级别的Git配置文件,用于设置用户信息、默认编辑器等。

添加和提交

  • 添加单个文件到仓库
    1
    git add <文件名>
  • 添加所有文件到仓库
    1
    git add .
  • 提交所有暂存区的文件到仓库
    1
    git commit -m "提交信息"
  • 提交所有已修改的文件到仓库(被git追踪即可,不需要添加到暂存区)
    1
    git commit -am "提交信息"

查看

  • git status 查看文件状态,git status -s使输出信息更加简洁
    1
    git status
  • 查看提交历史,—oneline可省略
    1
    git log --oneline
  • 查看未暂存的文件更新了哪些部分
    1
    git diff
  • 查看两次提交之间的差异
    1
    git diff [commit1] [commit2]

    远程仓库

  • 添加远程仓库
    1
    git remote add <远程仓库名> [远程仓库url]
  • 查看远程仓库
    1
    git remote -v
  • 删除远程仓库
    1
    git remote rm <远程仓库名>
  • 重命名远程仓库
    1
    git remote rename <远程仓库名> <新远程仓库名>
  • 从远程仓库拉取代码
    1
    git pull <远程仓库名> <分支名>
  • 推送代码到远程仓库
    1
    git push <远程仓库名> <分支名>
  • 获取所有远程分支
    1
    git fetch <远程仓库名>
  • 查看远程分支
    1
    git branch -r

    分支

  • 查看本地所有分支,当前分支前面有一个*-r查看远程分支,-a查看所有分支
    1
    git branch 
  • 创建新分支
    1
    git branch <分支名>
  • 切换到指定分支并更新工作区
    1
    git checkout <分支名>
  • 创建新分支并切换到该分支
    1
    git checkout -b <分支名>
  • 删除一个已经合并的分支
    1
    git branch -d <分支名>
  • 删除一个分支,不管是否合并
    1
    git branch -D <分支名>
  • 给当前的提交打上标签,通常用于版本发布
    1
    git tag <标签名>

    合并分支

  • 合并分支a到分支b,-no-ff表示禁用fast-forward模式,合并后的历史有分支,能够清晰的看出曾经做过合并,而-ff则表示使用fast-forward模式,合并后的历史会变成一条直线,没有分支。
    1
    git merge -no-ff "message" <分支名>
    1
    git merge -ff  "message" <分支名>
    合并&squash所有提交到一个提交
    1
    git merge --squash <分支名>