Git的设计让使用者觉得自己比想象中的笨。 —— Andrew Morton (Linux核心开发者)
初次使用
在命令行输入以下命令:
1
2
> git config --global user.name "用户名"
> git config --global user.email "邮箱"
这个用户名和邮箱将是你未来使用 Git 进行项目版本管理的身份标识
用户名和邮箱不要使用中文
理论基础
Git 记录的是什么?
用过 SVN 的应该都知道, SVN 记录的是每一次版本变动的内容
而 Git 则是将每个版本独立保存
三棵树
-
Working: 工作区域, 一般是项目所存放的目录
-
Stage: 暂存区域, 暂存所有改动准备提交
-
Repository: Git 仓库, 最终存放项目的位置, 并且携带版本编号
工作流程
-
在工作目录中添加、修改文件
-
将需要进行版本管理的文件放入暂存区域
-
将暂存区域的文件提交到 Git 仓库
三种状态
- 已修改 (modified)
- 已暂存 (staged)
- 已提交 (committed)
流程图
简单使用
-
创建项目文件夹, 并初始化仓库
1
> git init
-
添加
README.md
文件, 并提交到 Git 仓库1 2
> git add ./README.md > git commit -m "add a README file."
基础操作
查看状态
1
> git status
-
添加
LICENSE
文件后 -
将
LICENSE
加入暂存区 -
将暂存区的最新记录撤回
-
将
LICENSE
提交到仓库, 并修改LICENSE
文件 -
git checkout -- [file]
: 将仓库中的文件覆盖回本地 (撤销修改)
查看历史
1
2
3
4
5
> git log
> git log --all --oneline --graph # 图形化简要显示所有log (包括分支)
# or 安装 tig 工具 (非常好用)
> tig
回到之前版本
1
> git reset HEAD~
移动 HEAD 的指向, 将其指向上一个快照
-
reset 命令说明
-
git reset --mixed HEAD~
: 移动 HEAD 的指向, 将其指向上一个快照。将 HEAD 移动后指向的快照回滚到工作目录, 并保留修改。等同于git reset HEAD~
-
git reset --soft HEAD~
: 移动 HEAD 的指向, 将其指向上一个快照。并将 HEAD 移动前指向的快照回滚到暂存区域, 并保留修改。 -
git reset --hard HEAD~
: 移动 HEAD 的指向, 将其指向上一个快照。将 HEAD 移动后指向的快照回滚到工作目录, 并丢弃修改。
-
-
指定 ID 回滚
1
> git reset [版本快照的ID]
-
回滚个别文件
1
> git reset [版本快照] [文件名 or 路径]
版本对比
-
比较暂存区域与工作目录
1
> git diff
-
比较两个历史快照
1
> git diff [快照ID1] [快照ID2]
-
比较当前工作目录和 Git 仓库中的快照
1
> git diff [快照ID]
-
比较暂存区域和 Git 仓库快照
1
> git diff --cached [快照ID]
修改最近提交
-
场景一: 版本刚一提交 (commit) 到仓库, 突然想起漏掉两个文件还没有添加 (add)
-
场景二: 版本刚一提交 (commit) 到仓库, 突然想起版本说明写得不够全面
执行带 --amend
选项的 commit
提交命令, Git 就会”更正”最近的一次提交
1
> git commit --amend -m "这是修改的说明"
删除文件
1
> git rm [文件名]
该命令删除的只是工作目录和暂存区域的文件, 也就是取消跟踪, 在下此提交时不纳入版本管理
1
2
> git rm -f <文件名> # 暴力删除
> git rm --cached [文件名] # 保留工作目录
重命名文件
1
> git mv [旧文件名] [新文件名]
Git 分支
克隆一份全新的目录以同样拥有 5 个分支来说,
SVN 是同时复制 5 个版本的文件, 也就是说重复 5 次同样的动作。
而 Git 只是获取文件的每个版本的元素, 然后只载入主要的分支 (master)
-
创建
feature
分支1
> git branch feature
-
切换到
feature
分支1 2
> git checkout feature > git checkout -b feature2 # 自动创建分支并切换
-
将指定分支合并到当前分支
1 2
> git checkout master # 切换到主分支 > git merge feature # 将 feature 分支合并到 master 分支
-
删除
feature2
分支1
> git branch -D feature2
【完】附一份 《Git 笔记》
本文由
Oscaner
创作, 采用
知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外, 均为本站原创或翻译, 转载前请务必署名