创建版本库
在本地创建版本库
切换到版本库文件夹下,使用如下命令
git init
从远程仓库拉取版本库
git clone git@github.com:michaelliao/gitskills.git
提交
修改文件后,用git add <filename>
添加到暂存区
然后用git commit -m'xxxx'
添加到版本库
比较
git status
可以查看当前分支的状态
git diff
比较工作区和暂存区的不同
git diff --cached
比较暂存区和版本库的区别
git diff --HEAD
比较工作区和版本库的区别
回退
git log
可以查看提交的日志
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset --hard HEAD^
可以回退到上一个版本
- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。
- 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
- 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版
撤销修改
工作区做了修改后 没有add到暂存区时 可以用
git checkout -- filename
撤销修改, – 很重要,不要忘
如果已经add了,那么可以用
git reset HEAD file
可以把暂存区的修改退回到工作区,就回到了add前的状态
删除文件
git rm fileNAME
然后再提交
创建远程库
先在github网站上新建一个库
然后在本地用
git remote add origin git@github.com:michaelliao/learngit.git
关联起来
然后就可以用
git branch --set-upstream-to origin/dev dev//远程没有dev时会有问题
git push -u origin master
把更改推送到远程版本库 -u 的意思是把 master分支与远程的 origin master 关联起来
,如果远程没有master分支,那么就会自动创建
管理也可以用
创建分支
git branch dev
切换分支
git checkout dev
跟前面的回退比较下,没有 –
这两条命令也可以简化为
git checkout -b dev
可以用如下命令从远程库clone分支到本地
git checkout -b dev origin/dev
切换到dev后 对文件进行修改,然后 add commit
再用checkout指令切回到master
这时候master下的文件回到了修改前的状态,因为之前的修改是在dev分之下进行的,master不会受影响
如果需要把dev的修改整合到master,可以使用
git merge dev
如果需要删除分支
git branch -d dev
要查看当前是哪个分支,使用
git branch
解决merge时的冲突
把冲突的文件改成正确的样子然后 add commit即可
git log --graph
可以查看分支的合并情况
merge 的时候会默认使用 Fast forward模式,会自动提交,但是这个模式是看不到分支的合并情况的,如果不想使用这个模式需要添加几个参数
$ git merge --no-ff -m "merge with no-ff" dev
–no-ff就是不使用这个模式,如果没有冲突就会自动提交,-m就是log信息
分支管理策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
bug分支
处理bug建议用bug分支
比如我在dev分支上进行新功能的开发,这时候需要修复master的bug,那么先需要用
git stash
把当前的工作现场存储起来
然后切换到master分支,创建一个bug分支,修复好以后merge进去
然后再切换到dev分支,用
git stash list
就可以看到储存起来的stash
可以用git stash apply
进行恢复,但是不会删除stash中的内容,需要git stash drop
来手动删除
也可以用git stash pop
可以恢复并且直接删除
有些人可能会有疑问,master上的bug被修复好了,但是dev的还没修复,那功能开发完以后把dev merge到master的时候不是会有冲突吗?
git关注的是修改
所以只要bug修改的代码和新功能的代码没有关系就不会有冲突
如果有冲突,那么修复即可
查看远程库的信息
git remote
git remote -v//可以看到你是否有推送权限
抓取分支
git pull
使用前提是要先把两个分支管理起来
git branch --set-upstream-to origin/dev dev
标签
标签就是版本库的快照
首先切换到你需要打标签的分支,然后用
git tag v1.0
就可以创建标签了,但是创建的是最近一次commit的标签
可以用
git tag
查看所有标签
要给之前的提交打标签,需要git log --pretty=oneline --abbrev-commit
查看提交的id,然后git tag v2.0 commitId
就ok了,commitId就是你想要打标签的那次提交的id
可以用git show tagName
查看标签的详细信息
git tag -d v1.0//删除标签
git push origin :refs/tags/v0.9//删除远程库标签
git push origin v1.0//把标签推送到远程库
git push origin --tags
一些技巧
配置别名
git config --global alias.co checkout
这样 checktout 命令就可以简化为 git co
如果是简化多个单词的命令 则需要用引号包裹起来
$ git config --global alias.unstage 'reset HEAD'
查看最近指定数目的log
git log -10
下面这个丧心病狂的指令可以让你的log记录清晰无比
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"