Git命令常规操作
常用命令说明
命令命令说明add添加文件内容至索引,暂存区bisect通过二分法查找定位引入 bug 的变更。二分法:每次截取总数的一半寻找bugbranch列出、创建或删除分支checkout检出一个分支或路径到工作区,-b 切换分支,分支不存在就创建clone克隆一个版本库到一个新目录commit暂存区上传到本地仓库diff显示提交之间、提交和工作区之间等的差异,对比本地仓库和远程仓库差异fetch从另外一个版本库下载对象和引用grep输出和模式匹配的行,查找内容init创建一个空的仓库log显示提交日志,reflogmerge合并两个或更多开发历史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 commit
1 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
版权归原作者 丨析木丨 所有, 如有侵权,请联系我们删除。