git详解

目录

常用命令速查

一、Git 的概念与作用

二、Git 仓库(Repository)

1. 本地仓库

2. 远程仓库

三、Git 的三个核心区域

1. 工作区(Working Directory)

2. 暂存区(Staging Area / Index)

3. 版本库(Repository / Git Directory)

四、文件的四种状态

五、切换版本

六、分支(Branch)

1. 分支的概念

2. 分支的创建与删除

3. 分支合并

4. 合并冲突

七、远程仓库

1. 克隆远程仓库(Clone)

1. 克隆命令

2. 克隆特定分支

3. 协议选择

2. 关联本地仓库与远程仓库

3. 推送远程仓库

4. 拉取远程仓库

1. 基本拉取命令

2. 拉取并变基(Rebase)

3. 解决拉取冲突

八、忽略文件


常用命令速查

命令作用
git -v查看 git 版本
git init初始化 git 仓库
git add 文件标识暂存某个文件
git add .暂存所有文件
git commit -m '说明注释'提交产生版本记录
git status查看文件状态 - 详细信息
git status -s查看文件状态 - 简略信息
git ls-files查看暂存区文件列表
git restore 文件标识从暂存区恢复到工作区
git rm --cached 文件标识从暂存区移除文件
git log查看提交记录 - 详细信息
git log --oneline查看提交记录 - 简略信息
git reflog --oneline查看完整历史 - 简略消息
git reset 版本号切换版本代码到暂存区和工作区
git branch 分支名创建分支
git branch查看本地分支
git branch -d 分支名删除分支
git checkout 分支名切换分支
git checkout -b 分支名创建并立刻切换分支
git merge 分支名把分支提交历史记录合并到当前所在分支
命令作用
git remote add 远程仓库别名 远程仓库地址添加远程仓库地址
git remote -v查看远程仓库地址
git remote remove 远程仓库别名删除远程仓库地址
git pull 远程仓库别名 分支名拉取
git push 远程仓库别名 分支名推送
git pull --rebase 远程仓库别名 分支名拉取合并
git clone 远程仓库地址克隆

一、Git 的概念与作用

Git 是一个分布式版本控制系统,用于跟踪和管理文件(尤其是代码)的修改历史。
核心作用

  1. 版本控制:记录每次修改的差异,支持回退到任意历史版本。

  2. 协作开发:多人并行开发,合并代码变更。

  3. 分支管理:支持多分支独立开发(如新功能、Bug 修复)。

  4. 备份与恢复:本地和远程仓库双重备份,防止代码丢失。

检验下载成功:

1.打开 bash 终端(git 专用)

2.命令:git -v(查看版本号)

配置:用户名和邮箱,应用在每次提交代码版本时表明自己身份

命令:

git config --global user.name "name"

git config --global user.email "@email"

二、Git 仓库(Repository)

仓库是 Git 管理项目的核心单元,分为两类:

1. 本地仓库

  • 存储在开发者本地计算机中,包含完整的项目历史记录。

  • 初始化命令:git init(创建新仓库)或 git clone(克隆远程仓库)。

    git init  # 将当前目录初始化为 Git 仓库
    git clone 远程仓库地址  # 克隆远程仓库

2. 远程仓库

  • 托管在远程服务器(如 GitHub、GitLab、Gitee),用于多人协作和代码共享。

  • 常用命令:

    git remote add origin <远程仓库地址>  # 关联远程仓库
    git push origin main                # 推送代码到远程仓库
    git pull origin main                # 从远程仓库拉取最新代码

三、Git 的三个核心区域

  • 工作区:实际开发时操作的文件夹
  • 暂存区:保存之前的准备区域(暂存改动过的文件)
  • 版本库:提交并保存暂存区中的内容,产生一个版本快照
命令作用
git add 文件名暂存指定文件
git add .暂存所有改动的文件
git commit -m "注释说明"提交并保存,产生版本快照

Git 通过三个逻辑区域管理文件的修改和提交流程:

1. 工作区(Working Directory)

  • 作用:用户直接编辑文件的目录(即项目文件夹)。

  • 特点:所有未提交的修改都存在于工作区。

  • 常用命令:直接修改文件(如 vim file.txt)。

2. 暂存区(Staging Area / Index)

  • 作用:临时存放准备提交的修改,允许选择性提交部分文件。

  • 常用命令

    git add file.txt    # 将文件的修改添加到暂存区
    git add .           # 添加所有修改到暂存区
    git reset HEAD      # 撤销暂存区的修改(回退到工作区)

3. 版本库(Repository / Git Directory)

  • 作用:保存项目的所有提交历史(即 .git 目录)。

  • 常用命令

    git commit -m "提交说明"  # 将暂存区的修改提交到版本库
    git log                 # 查看提交历史
    git checkout <commit-id> # 切换到指定提交状态

三区关系流程图:

工作区 → git add → 暂存区 → git commit → 版本库

暂存区作用:

暂存区:暂时存储,可以临时恢复代码内容,与版本库解耦

暂存区覆盖工作区的命令:git restore 目标文件(注意:完全确认覆盖时使用)

从暂存区移除文件的命令:git rm --cached 目标文件


四、文件的四种状态

在 Git 中,文件可能处于以下四种状态:

1. 未跟踪(Untracked)

  • 含义:文件未被 Git 管理(未执行过 git add)。

  • 典型场景:新创建的文件。

  • 转换命令git add <file> → 文件变为 已暂存(Staged)

2. 已修改(Modified)

  • 含义:文件已被 Git 跟踪,但修改未添加到暂存区。

  • 典型场景:修改了已存在的文件但未执行 git add

  • 转换命令git add <file> → 文件变为 已暂存(Staged)

3. 已暂存(Staged)

  • 含义:文件的修改已添加到暂存区,等待提交。

  • 典型场景:执行 git add 但未执行 git commit

  • 转换命令

    • git commit → 提交到版本库,变为 未修改(Unmodified)

    • git reset HEAD <file> → 回退到 已修改(Modified)

4. 未修改(Unmodified)

  • 含义:文件内容与版本库中的最新提交一致。

  • 典型场景:文件未发生修改,或修改已提交到版本库。

  • 转换命令:修改文件 → 变为 已修改(Modified)


五、切换版本

概念:把版本库某个版本对应的内容快照,恢复到工作区/暂存区。

回退命令:

# 回退到指定提交,覆盖工作区和暂存区(--hard)
git reset --hard <commit-hash>

# 回退到指定提交,保留工作区和暂存区修改(--soft)
git reset --soft <commit-hash>

# 回退到指定提交,保留工作区修改(--mixed)
git reset --mixed <commit-hash>
  • 只有记录在版本库的提交记录才能恢复
  • 回退后,继续修改->暂存->提交操作即可

 查看提交历史:

# 简洁版提交历史(只显示提交哈希和说明)
git log --oneline

# 查看所有操作记录(包括已删除的提交)
git reflog --oneline

六、分支(Branch)

1. 分支的概念

分支是 Git 的核心功能,允许开发者在不同的代码线上独立工作。每个分支代表一个独立的开发路径,互不影响。

  • 默认分支:通常为 main 或 master,用于存放稳定代码。

  • 功能分支:如 feature-login,用于开发新功能。

  • 修复分支:如 hotfix-bug,用于紧急修复问题。

分支的作用

  1. 隔离开发环境,避免不同任务互相干扰。

  2. 支持多人协作,并行推进多个任务。

  3. 便于版本回退和代码审查。


2. 分支的创建与删除

1. 创建分支

git branch feature-login      # 创建名为 feature-login 的分支

2. 切换分支

git checkout feature-login    # 切换到 feature-login 分支
git checkout -b feature-login # 创建并切换到新分支(推荐)

3. 查看分支

git branch                   # 查看本地分支(当前分支前有 * 号)
git branch -a                # 查看所有分支(本地 + 远程)

4. 删除分支

git branch -d feature-login  # 删除已合并的分支(安全)
git branch -D feature-login  # 强制删除未合并的分支(慎用)

5. 推送分支到远程仓库

git push origin feature-login  # 将本地分支推送到远程

3. 分支合并

git checkout master       # 切换到目标分支
git merge content         # 合并 content 到 main
git branch -d content     # 删除合并后的分支
  • 若目标分支(如 main)没有新提交,当前分支(如 feature)会直接领先,main 分支的指针直接移动到 feature-login 的最新提交,无合并提交。
  • 若目标分支(如 main)和当前分支(如 feature)都有新提交,则会生成一个新的合并提交,包含两个分支的修改。

注意:提交记录的顺序按照产生的先后顺序排列,而非合并的先后顺序。


4. 合并冲突

当两个分支修改了同一文件的同一部分时,Git 无法自动合并,需手动解决冲突。

冲突产生示例:

  • 分支 A 修改 file.txt 第 5 行:Hello, World!

  • 分支 B 修改 file.txt 第 5 行:Hi, Git!

  • 合并时触发冲突。

冲突解决步骤:

  1. 定位冲突文件

    git status                  # 查看冲突文件列表
  2. 手动编辑冲突文件
    需要删除冲突标记,保留需要的代码。冲突标记示例:

    <<<<<<< HEAD
    Hello, World!  # 当前分支(如 main)的修改
    =======
    Hi, Git!       # 要合并的分支(如 feature)的修改
    >>>>>>> feature
  3. 标记冲突已解决

    git add file.txt           # 将解决后的文件加入暂存区
  4. 完成合并提交

    git commit -m "Merge feature into main"  # 提交合并结果

还可以取消合并(放弃解决冲突):

git merge --abort            # 终止合并,恢复到合并前的状态

七、远程仓库

概念:托管在因特网或其他网络中的你的项目的版本库。

作用:保存版本库的历史记录,多人协作。

创建:公司自己服务器 / 第三方托管平台(Gitee,GitLab,GitHub...)

1. 克隆远程仓库(Clone)

将远程仓库完整复制到本地,自动关联远程仓库(默认名为 origin)。

1. 克隆命令
git clone <远程仓库URL> [本地目录名]

# 示例
git clone https://github.com/user/repo.git  # 克隆到当前目录下的 repo 文件夹
git clone git@github.com:user/repo.git my-project  # 使用 SSH 协议,并指定本地目录名
2. 克隆特定分支
git clone -b <分支名> <远程仓库URL>

# 示例
git clone -b dev https://github.com/user/repo.git  # 克隆 dev 分支
    3. 协议选择
    协议类型URL 格式特点
    HTTPShttps://github.com/user/repo.git无需配置 SSH 密钥,需输账号密码
    SSHgit@github.com:user/repo.git需配置 SSH 密钥,无需输密码

    2. 关联本地仓库与远程仓库

    如果本地仓库未关联远程仓库,需手动添加关联。

    添加远程仓库:

    git remote add <远程仓库名> <远程仓库URL>
    
    # 示例
    git remote add origin https://github.com/user/repo.git

      查看远程仓库地址:

      git remote -v

      3. 推送远程仓库

      将本地仓库的提交(commit)上传到远程仓库。

      1. 基本推送命令

      git push <远程仓库名> <本地分支名>:<远程分支名>
      
      # 示例
      git push origin main          # 将本地 main 分支推送到远程 main 分支(同名可简写)
      git push origin dev:new-feat  # 将本地 dev 推送到远程 new-feat 分支

        2. 推送命令扩展

        # 强制推送,覆盖远程分支,可能丢失他人提交,常用于修正提交历史后
        git push -f origin main  
        
        # 推送所有本地分支到远程
        git push --all origin

        4. 拉取远程仓库

        将远程仓库的最新代码同步到本地(相当于 git fetch + git merge)。

        1. 基本拉取命令
        git pull <远程仓库名> <远程分支名>
        
        # 示例
        git pull origin main  # 拉取远程 main 分支并合并到当前本地分支
        2. 拉取并变基(Rebase)

        避免产生合并提交,保持提交历史线性:

        git pull --rebase origin main
        3. 解决拉取冲突

        若拉取时出现冲突(文件被多人修改):

        1. 根据提示手动解决冲突文件中的 <<<<<<< HEAD 和 >>>>>>> 标记。

        2. 将解决后的文件标记为已解决:

          git add <冲突文件>
        3. 继续合并:

          git rebase --continue  # 如果使用 --rebase
          或
          git commit -m "Merge conflict resolved"  # 普通合并

        推送冲突解决:

        • 推送前先拉取最新代码:

          git pull origin main  # 拉取并合并远程变更
          git push origin main  # 重新推送


        八、忽略文件

        概念:.gitignore 文件可以让 git 彻底忽略跟踪指定文件

        目的:让 git 仓库更小更快,避免重复无意义的文件管理

        例如:

        1.系统或软件自动生成的文件

        2.编译产生的结果文件

        3.运行时生成的日志文件,缓存文件,临时文件等

        4.涉密文件,密码,秘钥等文件

        创建:

        1.项目根目录新建 .gitignore 文件

        2.填入相应配置来忽略指定文件

        注意:如果文件已经被暂存区跟踪过,可以从暂存区移除即可。


        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值