Git命令常规操作
- 常用命令说明
- 常用操作示意图
- 文件的状态变化周期
- 添加文件跟踪
- 文件会添加到.git的隐藏目录
- 由工作区提交到本地仓库
- 查看git的状态
- 提交后的git目录状态
- 删除文件
- 重命名暂存区数据
- 查看历史记录
- 还原历史数据
- 还原未来数据
- 标签使用
- 对比数据
常用命令说明
命令 | 命令说明 |
---|---|
add | 添加文件内容至索引,暂存区 |
bisect | 通过二分法查找定位引入 bug 的变更。二分法:每次截取总数的一半寻找bug |
branch | 列出、创建或删除分支 |
checkout | 检出一个分支或路径到工作区,-b 切换分支,分支不存在就创建 |
clone | 克隆一个版本库到一个新目录 |
commit | 暂存区上传到本地仓库 |
diff | 显示提交之间、提交和工作区之间等的差异,对比本地仓库和远程仓库差异 |
fetch | 从另外一个版本库下载对象和引用 |
grep | 输出和模式匹配的行,查找内容 |
init | 创建一个空的仓库 |
log | 显示提交日志,reflog |
merge | 合并两个或更多开发历史 |
mv | 移动或重命名一个文件、目录或符号链接 |
pull | 获取并合并另外的版本库或一个本地分支,本地仓库拉去远程仓库代码 |
push | 更新远程引用和相关的对象 |
rebase | 本地提交转移至更新后的上游分支中 |
reset | 重置当前HEAD到指定状态 ,git reset --hard commit的值 |
rm | 从工作区和索引中删除文件,–cached 只从索引区删除,-f 删除暂存区和本地文件 |
show | 显示各种类型的对象 |
status | 显示工作区状态 |
tag | 创建、列出、删除或校验一个GPG签名的 tag 对象 |
常用操作示意图
文件的状态变化周期
添加文件跟踪
git add .git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: README
#
---
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README
#
文件会添加到.git的隐藏目录
[root@gitlab git_data]# tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── objects
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── info
│ └── pack
└── refs├── heads└── tags
由工作区提交到本地仓库
[root@gitlab git_data]# git commit -m 'first commit'
[master(根提交) bb963eb] first commit1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 README
查看git的状态
[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区# On branch master
nothing to commit, working directory clean
提交后的git目录状态
[root@gitlab git_data]# tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── master
├── objects
│ ├── 54
│ │ └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│ ├── bb
│ │ └── 963eb32ad93a72d9ce93e4bb55105087f1227d
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── info
│ └── pack
└── refs├── heads│ └── master└── tags
删除文件
git rm --cached 文件名 //只从索引区删除git rm -f 文件名 //删除暂存区和本地文件
重命名暂存区数据
没有添加到暂存区的数据直接mv/rename改名即可。
已经添加到暂存区数据
git mv 原名 新名字
查看历史记录
git log #→查看提交历史记录git log -2 #→查看最近几条记录git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。
使用format参数来指定具体的输出格式
格式 | 说明 |
---|---|
%s | 提交说明。 |
%cd | 提交日期。 |
%an | 作者的名字。 |
%cn | 提交者的姓名。 |
%ce | 提交者的电子邮件。 |
%H | 提交对象的完整SHA-1哈希字串。 |
%h | 提交对象的简短SHA-1哈希字串。 |
%T | 树对象的完整SHA-1哈希字串。 |
%t | 树对象的简短SHA-1哈希字串。 |
%P | 父对象的完整SHA-1哈希字串。 |
%p | 父对象的简短SHA-1哈希字串。 |
%ad | 作者的修订时间。 |
还原历史数据
Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD,上一个版本则会叫做HEAD,当然一般会用HEAD~5来表示往上数第五个提交版本。
git log //查看历史提交数据的commit数值git reset --hard commit数值
还原未来数据
git reflog //查看未来历史更新点
git reset --hard commit数值
标签使用
在git push 之前打标签即可
git tag v1.0 //当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。git tag //查看当前所有的标签git show v1.0 //查看当前1.0版本的详细信息git tag v1.2 -m "version 1.2 release is test" //创建带有说明的标签,-a指定标签名字,-m指定说明文字git tag -d v1.0 //我们为同一个提交版本设置了两次标签,删除之前的v1.0
git reset --hard HEAD^ //回滚到上一个版本git reset --hard HEAD^^ //回滚到上两个版本git reset --hard HEAD~5 //回滚到五个版本之前git reset --hard e9ed8b38a //使用commit值回滚git reset --hard V1.0 //使用标签回滚
对比数据
git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放⼼多了。
git diff README
git diff --name-only HEAD HEAD^
git diff --name-only head_id head_id2