初始化仓库
1 | git init |
查看修改用户名和用户邮箱
1 | git --global user.name "your name" |
提交文件到仓库
1 | git add file1 file2 file3 |
工作区状态:
1 | git status |
查看修改内容:
(文本文件可以知道修改了什么,其他文件只能知道修改了,但是修改了什么不知道)
1 | git diff files1 |
显示提交日志:
1 | git log |
版本回退:
1 | git reset --hard HEAD~100 数字为上N个版本 |
历史命令:
1 | git reflog |
撤销修改:
1 | git checkout -- filename 撤销 工作区 修改 |
删除文件
1 | git rm filename |
手动 rm filename 之后,git rm filename 和git add filename 效果一样。
最后提交 git commit -m
远程仓库 GitHub
1 | git remote add origin git@server-name:path/repo-name.git |
克隆远程仓库
1 | git clone git@github.com:text/gitskills.git (快) |
查看分支
1 | git branch |
创建并切换branch
1 | git checkout -b dev <==> git branch dev 创建 |
分支(branch)合并
1 | git merge dev |
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:

保存现场,处理其他分支任务
git stash
git stash list
git stash pop <==> git stash apply 恢复 git stash drop 删除
开发新feature,新建分支,便于后期合并删除
强制删除未合并的分区:
1 | git branch -D branchName |
其他
- 查看远程库信息,使用git remote -v;
- 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
- 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
- 建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name;
- 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
标签
命令git tag
用于新建一个标签,默认为HEAD,也可以指定一个commit id; 命令git tag -a
-m “blablabla…”可以指定标签信息; 命令git tag可以查看所有标签。
命令git push origin
可以推送一个本地标签; 命令git push origin –tags可以推送全部未推送过的本地标签;
命令git tag -d
可以删除一个本地标签; 命令git push origin :refs/tags/
可以删除一个远程标签。