1054 字
5 分钟
Git-学习笔记
Git 基础概念
Git 工作区、暂存区与本地仓库

- 工作区:电脑中看到的目录
- 暂存区(stage / index):Git 用来临时存放即将提交的文件快照的区域
- 本地仓库:存储项目的所有版本历史记录的数据库
HEAD 与 Branch ref
- HEAD 是一个代表当前位置的指针
- Branch ref 是指向某个具体提交对象(commit object)的指针,代表分支的位置
HEAD 与 Branch ref 两种关系
- HEAD -> Branch ref:表示当前在某个分支上工作
- HEAD -> Commit object:表示处于“分离头指针”状态
辨析移动 HEAD 和 Branch ref
- 仅移动 HEAD(游离状态) 切换视图,不改变任何分支指针:
git checkout <commit/tag>/git switch --detach:HEAD 指向指定提交,进入游离 HEAD 状态git checkout/switch <branch>:HEAD 切换至另一分支(正常分支切换)
- 移动当前分支指针(HEAD 随动) 在 HEAD 指向分支时,以下操作会推动该分支前进或回退:
git commit:分支指针前移至新提交git reset <commit>:强制回退分支指针git merge/git rebase/git pull:分支指针前移以整合新提交git branch -f <name> <commit>:强制移动非当前分支的指针git fetch:更新远程追踪分支(如origin/main),不改变本地分支与 HEAD
远程仓库(Remote Repository)
- origin/main:远程仓库在本地的只读快照
相对引用
TIP对与 Branch Ref , HEAD 以及 Commit Hash 都可以使用
~是垂直选择^是水平选择(多父级/合并节点)
HEAD\HEAD~0当前版本
HEAD^\HEAD~1上一个版本
HEAD^^\HEAD~2上上一个版本
HEAD^n适用于多个 parent 的提交,表示第n个 parent 提交(默认值为 1 即父亲的序列号是从 1 开始的)
^n与~n支持嵌套,例如HEAD~2^1表示 HEAD 的上上个提交的第一个 parent 提交
常见场景(用到的时候再补)
初始化或克隆仓库
git init # 初始化一个新的 Git 仓库git clone <repo_url> # 克隆一个远程仓库到本地git clone --depth 1 <repo_url> # 浅克隆,只拉取最近 1 条提交历史查看状态与日志
git status # 查看当前工作区和暂存区的状态git log # 查看提交历史日志添加文件到暂存区
git add <file> # 添加指定文件到暂存区git add . # 添加当前目录下的所有文件到暂存区提交更改
git commit -m "Commit message" # 提交暂存区的更改并添加提交信息git commit --amend # 修改上一次提交分支操作
git branch # 列出所有分支git branch <branch-name> # 创建新分支git checkout <branch-name> # 切换到指定分支git branch -d <branch-name> # 删除分支git merge <branch-name> # 合并指定分支到当前分支git reset <--soft/--hard> HEAD~1 # 回退到上一个提交,--soft 保留更改,--hard 丢弃更改远程仓库操作
git remote -v # 查看远程仓库信息git fetch <remote> # 从远程仓库获取最新更改git push <remote> <branch> # 推送本地分支到远程仓库git push -u <remote> <branch> # 推送并设置上游分支git pull <remote> <branch> # 从远程仓库拉取并合并分支查看历史提交
git log # 查看提交历史git log --oneline # 简洁模式查看提交历史git log --graph # 图形化查看提交历史版本回退
git reset --hard <commit-hash> # 回退到指定提交,丢弃之后的所有更改工作流
# 1. 克隆或初始化仓库git clone <仓库URL> 或 git init
# 2. 创建开发分支git checkout -b feature/new-feature
# 3. 开发并提交git add .git commit -m "实现新功能"
# 4. 推送到远程git push origin feature/new-feature
# 5. 合并到主分支git checkout maingit pull origin maingit merge feature/new-featuregit push origin main解决远程冲突
git fetch # 获取远程更新git rebase origin/main # 变基到最新的 main 分支git push # 推送变基后的提交# 或者# 普通的 pull 会产生一个 merge commitgit pull --rebase # 拉取并变基git push # 推送变基后的提交