本文总结了一些Git的常用命令,以供参考:
1、在Windows上安装Git
安装完成后,还需要最后一步设置,在命令行输入:
git config –global user.name “YourName”
git config –global user.email “email@example.com”
2、克隆现有仓库
git clone [url] [自定义name]
3、创建版本库
首先,选择一个合适的地方,创建一个空目录:
$ cd /d/appData
$ mkdir gitRepo
$ cd gitRepo
$ pwd
/d/appData/gitRepo
##pwd命令用于显示当前目录
##然后,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /d/appData/gitRepo/.gi
4、把文件添加到版本库
$ git add index.txt
$ git commit -m "add index.txt"
$ git push
## add 命令把文件提交到缓存区(跟踪)
## commit 把缓存区文件提交到版本库,-m 参数是指定comments
## [添加提交记录,并且分支指向前移]
## 可以add多次,一次commit
5、查看版本库状态
$ git status
该命令查看到的结果分为两部分:
一,add到缓存区内等待被commit到版本库的更改。
二,工作区内的还未add到缓存区的更改
6、忽略文件
示例:
*.[oa]
*~
.idea
*.iml
out
gen
/target/
7、查看工作区更改内容
git diff //当前做的哪些更新还没有暂存
git diff -- cached //有哪些更新已经暂存起来准备好了下次提交
$ git diff index.txt
$ git diff HEAD -- index.txt
$ git diff --cached index.txt
$ git diff 287d9bd -- index.txt
## 1、git diff:工作区和缓存区比较
## 2、git diff --cached:缓存区和HEAD比较
## 3、git diff HEAD:工作区和HEAD比较
## 4、git diff commitID:工作区和某一版本的比较
8、分支相关
区分提交记录和分支
(1)分支指向提交记录
(2)按逻辑分解工作到不同的分支,使用分支其实就相当于在说:“我想基于这个提交以及它所有的父提交进行新的工作。”
新功能开发流程:
创建并切换到功能分支,开发完毕后提交,并合并到develop分支,在develop分支上push到远程
【创建】
git branch newImage //创建名newImage的新分支
git checkout newImage //切换到分支newImage
===>>git checkout -b <newImage> 创建新分支并切换
【合并】
//c1等指提交记录的哈希值
git checkout c1; git merge c2 //新增提交记录c3,包含c1\c2所有提交记录(树还有一个叉);但是c1的分支(bugFix)指向c3,c2的分支(master)还指向c2
git checkout c1; git rebase c2 //将c1分支的所有提交记录复制一个副本添加到到c2分支上(树还有两个叉);但是...
//【c1分支指向合并后的提交记录c2分支停在原位置,两个分支指向同一个叉的不同进度位置】
【在分支中移动1】
git checkout 提交记录的哈希值
//HEAD指向当前(最近一次)提交记录,HEAD-->分支名-->最近的提交记录;====>>HEAD的分离
【在分支中移动2】
相对引用
参照物:分支名/HEAD
位移:^num或~num
{~num:向上返回num代;^num:当有多个父提交时}
{支持链式操作,例如:git checkout HEAD~^2~2;例如:git branch bugWork HEAD^^2^}
【强制修改分支位置】
git branch -f bugFix HEAD~3 //强制修改分支bugFix 到HEAD~3处
【整理提交记录——已知提交记录的哈希值】
git cherry-pick c1 c2 c3
//将提交记录c1\c2\c3复制到当前分支HEAD下
====>>在不同分支上实现不同的功能,切换到develop分支,将做好功能的提交记录整理到develop分支下
【整理提交记录——未知哈希值,可从一系列提交记录中找出——交互式rebase】
git rebase -i/-interactive HEAD~4
//交互式整理HEAD上最近的4个提交记录,在git的UI界面,可以调整顺序,删除提交记录,合并提交记录相对体育
##相对于合并分支,可以选择合并指定的提交记录,而不是全部记录无差别的合并
9、撤销变更
git reset HEAD~1 //本地修改,之前的提交记录仍在,但未暂存
git revert HEAD //添加新的提交记录c',c'的内容是撤销原提交记录,可将c' push到远程库
10、杂项技巧
【提交】
git commit --amend //修改后提交,但并不产生新的提交记录,在原提交记录中修改
【git tag 锚点】
永远指向某个提交记录的标识呢,比如软件发布新的大版本
(1)设置 git tag <标签名> <提交记录哈希值>
(2)查找/切换 git checkout <标签名> //会使得HEAD分离
【git describe <参照物>】
描述最近{参照物}的锚点
参照物:可为分支名或HEAD
【git bisect】
查找产生 Bug 的提交记录
question
1.几个区域(工作区,暂存区,本地仓库)的位置