1、git概念
- 工作区(Working Directory):就是代码文件。
- 版本库(Repository):工作区下的隐藏目录.git。有3部分:暂存区,本地分支,HEAD指针
- 暂存区(stage): git add,把文件修改添加到暂存区;不会产生log
- 本地分支(branch): git commit 把暂存区的所有内容提交到当前分支
- HEAD指针: 指向master
- 隐藏区(stash)
- git stash //保存没有提交的东西到本地, 如果文件有冲突时,checkout要求先解决冲突
- git stash save “注释” //等同于git stash, 可以加注释
- git stash list //列出
- git stash pop //恢复之前的隐藏
- git stash clear //清空缓存区,慎用。及时commit, 否则会丢失代码
- 多分支情况
2、常用命令
git init //把这个目录变成Git可以管理的仓库
git status //查看状态
git diff //查看修改详情
git add readme.txt //提交到暂存区stage
git commit -m “first commit” //提交到master分支
git log //查看commit历史
git reset --hard HEAD //当前版本
git reset --hard HEAD^ //HEAD^ 回退到上一版本
git reset --hard HEAD~100 //HEAD^ 回退到上100个版本
/d/work/gitRepo/trGitInAction //工作区(Working Directory)
.git //隐藏目录,而是Git的版本库(包含暂存区stage+本地仓库master分支)。
.git/refs/heads/master //master分支,git commit
.git/refs/heads/dev //dev分支,git commit
.git/refs/tags
git checkout – readme.txt //让这个文件回到最近一次git commit或git add时的状态(使用版本库覆盖工作区)
//git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,
git reset HEAD readme.txt //把暂存区的修改回退到工作区。之后可以1,add添加到工作区;2,checkout放弃工作区的修改。
rm test.txt //删除工作区
git rm test.txt git commit test.txt //从版本库中删除该文件,
远程仓库-----------------
在github上创建一个新的仓库
$ git remote add origin https://github.com/tmriver/trGitInAction.git //添加远程库
$ git push -u origin master
git clone //从远程库克隆
分支管理-----------------为了并行开发,一个分支一个时间线。
创建分支只是创建一个指针
git checkout -b dev //创建并切换到dev分支。相当于git branch dev; git checkout dev
git branch //查看所有分支
git checkout master //切换分支,未add的代码不变。
git merge dev //合并指定分支dev到当前分支。
Fast-forward//表示这次合并是“快进模式”,也就是直接把master指向dev的当前提交,不是每次都能快进模式
git cherry-pick 39d9493d //合并指定的commit
$ git branch -d dev //删除dev。
Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
下载远程分支
git fetch -p otter //重新更新远程连接
git branch -a
git checkout dev4213
解决冲突
git checkout -b feature1 //创建新分支
add & commit readme.txt //commit, log:f1
git checkout master //切回master
add & commit readme.txt //commit, log:m1
git merge feature1 //合并代码,如果有冲突。Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
编辑readme.txt //可选的。即使冲突了也可以不编辑(不区分冲突与否)
重新add & commit readme.txt //commit, log:m2
git log //log依次为:m2,m1,f1… 合并成功
git log --graph //合并路线图
<<<<<<< HEAD
m33
f333
f3
保护工作区代码----------既不能add,又要切换分支
git stash //
git stash list
多人协作
git remote -v //
origin https://github.com/tmriver/trGitInAction.git (fetch) //pull权限
origin https://github.com/tmriver/trGitInAction.git (push) //push权限
标签
tag是版本库的快照,便于发布和查找,指向某个commit的指针(分支是线可以前后移动,标签是点不能移动)
git tag v1.0.0 //添加tag,默认是当前commit,也可以指定commitId
git tag //查看tag-list,按照字母排序
git show //查看tag详细
git tag -d v1.0.0 //删除
git push origin v1.0.0 //推送tag到远程
fork
主分支-远程仓库
本地分支-本地仓库。
git merge
http://www.cnblogs.com/chucklu/p/4056373.html
关联多个git(私有git+github)
代码来源(方便以后跟随官网升级,体会到git比svn开放强大,花费了周末和周一,学习让人快乐):
git clone https://github.com/alibaba/otter.git
cd otter/
git tag
git checkout -b dev4213 otter-4.2.13
git remote add dev http://xxx/yyy/otter.git
git push -u dev dev4213