git学习笔记
创建版本库
- 初始化一个Git仓库,使用git init命令
- 添加文件到Git仓库,分两步:
- git add <file>
- git commit -m <message>
时光机穿梭
版本回退
- git reset - - hard HEAD^ 回退到上一个版本
- git reset - - hard 1094a 回退到最新版本(窗口未关看到commit id)
- git reflog 记录每一次命令
工作区和暂存区
管理修改
每次修改先git add到暂存区,那就不会commit
撤销修改
git checkout - - <file> 文件在工作区的修改全部撤销
git reset HEAD <file>
删除文件
- 确实要从版本库中删除文件,那就用命令git rm 删掉,并且git commit
- 误删,版本库里还有,可以恢复到最新版本git checkout — <file>
分支管理
创建与合并分支
- 查看分支:git branch
- 创建分支:git branch <name>
- 切换分支:git checkout <name>
- 创建+切换分支:git checkout -b <name>
- 合并某分支到当前分支:git merge <name>
- 删除分支:git branch -d <name>
分支冲突
- 查看冲突内容
- 修改之后
- git add <file>
- git commit -m ‘conflict fixed’
- 删除分支 git branch -d <name>
分支管理策略
合并分支时,git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。强制禁用Fast forward模式,Git就会在merge时生成一个新的commit.
- git - -no-ff -m “merge with no-ff” dev
- 主分支Master(公测)
- 开发分支Develop(内测)
- 临时性分支
- 功能分支(feature)分支
- 预发布分支(release)分支
- 修补bug分支(fixbug)分支
注意:master分支非常稳定,仅用来发布新版本;dev分支是干活分支.
bug分支
当接到代号101的bug任务时,创建issue-101,但当前的dev分支上进行的分支工作还没有提交。工作进行到一半没法提交,但bug必须在2小时内修复。
Git提供了stash功能,可以把当前的工作现场存储起来,等以后恢复现场后继续工作:
1 | $ git stash |
- git stash
- git checkout master
- git checkout -b issue-101
- 修复bug
- git add <file>
- git commit -m ‘fix bug 101’
- git checkout master
- git merge —no-ff -m ‘merge bug fix 101’ issue-101
- git checkout dev
- git stash
- git stash list
- git stash apply <stash@{0}>
- git stash drop
- git stash pop
feature分支
添加一个新的功能,最好新建一个feature分支,在上面开发,完成后,合并,最后删除该feature分支.
- git checkout -b feature-vulcan
- git add vulcan.py
- git commit -m ‘add feature vulcan’
- git checkout dev
- 新功能取消,彻底销毁。git branch -D feature-vulcan
多人协作
- 查看远程 git remote -v
- 推送分支 git push origin master/dev (master,dev分支需要与远程同步,bug分支只需要本地修复,feature取决于是否推送到远程)
- 抓取分支 git pull origin master/dev
- 首先,可以试图用git push origin &lgt;branch-name>推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
rebase
- git rebase 把分叉的提交历史整理成一条直线
标签管理
发布一个版本时,同化成那个先在版本库中打一个标签,这样就唯一确定了打标签时刻的版本。无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是一个快照。
创建标签
- git checkout master
- git tag v1.0
- git tag v0.9 f52c633
- git tag -a v0.1 -m ‘version 0.1 relase’ 1094abd
- git tag 查看所有标签
操作标签
- git tag -d v0.1 删除标签
- git push origin v1.0 推送标签
- git push origin - - tags 推送所有标签
- 删除远程标签 git tag -d v0.9 /git push origin :refs/tags/v0.9