git
创建版本库
1 | mkdir learngit |
版本回退
git status
可以查看状态
git log
命令显示从最近到最远的提交日志
在 Git 中,用
HEAD
表示当前版本,上一个版本就是HEAD^
,上上个版本就是HEAD^^
git reset --hard HEAD^
把当前版本回退到上一个版本
git reset --hard 版本号
回退到目标版本
版本号可以通过git log
查看
git reflog
用来记录每一次命令
工作区和暂存区
工作区就是在电脑里能看到的目录
.git目录就是Git的版本库,里面含有暂存区,还有master分支以及指向master的第一个指针HEAD
git add 文件名
是把文件修改添加到暂存区
git commit -m "修改备注"
是把暂存区的所有内容提交到当前分支
撤销修改
乱改了工作区的某个文件的内容,想直接丢弃工作区的修改
git checkout -- readme.txt
- 修改后未被放到暂存区,撤销修改后就回到和版本库一模一样的状态
- 已经被添加到暂存区,又作了修改,撤销修改就回到添加到暂存区后的状态
乱改了工作区的某个文件内容,还添加到了暂存区,想丢弃修改
git reset HEAD <file>
可以以把暂存区的修改撤销掉,重新放回工作区,就回到了上面的场景,接着可以按上面场景修改
删除文件
1 | rm rest.txt//仅删除本地文件 |
添加远程库
1 | git remote add origin git@github.com:michaelliao/learngit.git |
分支管理
创建与合并分支
git每次提交都会串成一条时间线。
主分支为master分支,指向提交
HEAD指向的就是当前分支
git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点
当我们创建新的分支,例如dev,git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
把dev合并到master上就是直接把master指向dev的当前提交,合并完分支后,甚至可以删除dev分支
1 | git branch//查看分支 |
分支管理策略
Fast forward
模式,在这种模式下,删除分支后,会丢掉分支信息
要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
1 | git merge --no--ff -m "merge with no-ff" dev |
Bug分支
git stash
可以把当前工作区存储起来,使用之后查看工作区就是干净的
1 | git checkout master//假定需要在master分支上修复bug |
Feature分支
开发一个新 feature ,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除
多人协作
1 | git remote -v//查看远程库信息 |
推送分支
git push origin 分支名

抓取分支
1 | git clone ...//默认情况只能看到本地的master分支 |
在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突
标签管理
创建标签
1 | git checkout master//首先切换到需要打标签的分支 |
默认标签十大在最新提交的commit上的,如果之前的commit忘记打标签,可以找到历史提交的commit id,然后打上
1 | git log --pretty=oneline --abbrev-commit |
操作标签
创建的标签只会存储在本地,不会自动推送到远程
1 | git tag -d v0.1//删除标签 |