克隆
git clone <git链接> | 从远程仓库clone到本地 |
初始化
git init | 初始化版本库 |
git remote add origin <git链接> | 将远程仓库与本地仓库关联 |
git push -u origin master | 将本地仓库内容提交到远程仓库 (第一次推送加 -u) |
提交修改
git status | 查看当前状态 |
git diff | 查看已修改内容 |
git add | 将修改内容提交到暂存区 |
git commit | 将修改内容从暂存区提交到当前分支 |
git diff HEAD – <文件名> | 比较<文件>与版本库中的文件不同 |
回退
git log | 查看git历史(commit历史) |
git log --pretty=oneline | 查看git历史(格式化查看) |
git reset --hard HEAD^ | 对于暂存区(stage)中的内容,回到上一个版本(错误的内容add到了暂存区) HEAD(当前版本) HEAD^(上一个版本) HEAD^^(上两个版本) HEAD~100(上100个版本) |
git reset --hard <版本号> | 回退到指定版本 |
git reflog | 查看git历史(所有历史) |
git checkout – <文件名> | 对于工作区的内容,回退到上一版本 |
删除
git rm <文件名> git commit | 删除版本库中的文件 |
分支提交与删除
git checkout -b <分支名> | 新建分支并切换到新分支 |
git branch | 查看当前所有分支 |
git checkout <分支名> | 切换到指定分支 |
git merge <分支名> | 将指定分支合并到当前分支 |
git branch -d <分支名> | 删除指定分支 |
git branch -D <分支名> | 强制删除指定分支,分支未提交时使用 |
git log --graph | 查看分支合并图 |
git merge --no-ff -m “merge info” <分支名> | 合并指定分支到当前分支,并保留分支历史信息 |
git log --graph --pretty=oneline --abbrev-commit | 查看分支合并历史 |
分支管理
git stash | 存档工作现场 |
git stash list | 查看已存档的工作现场列表 |
git stash apply <存档id> | 恢复指定存档 |
git stash drop <存档id> | 删除指定存档 |
git stash pop <存档id> | 恢复指定存档并删除 |
git cherry-pick <提交编码> | 将指定提交的修改合并到当前分支 |
git rebase | 整理分支提交log |
标签管理
标签是作用于一次commit上的
git tag | 对HEAD打标签,也可以指定commit id |
git tag -a -m “blablabla…” | 指定标签信息 |
git tag | 查看所有标签 |
git tag -d | 删除指定标签 |
git push origin | 将指定标签推送到远程仓库 |
git push origin --tags | 推送所有未推送到远程仓库的标签 |
git push origin :refs/tags/ | 删除远程标签 |
全局配置
git config --global color.ui true | git配置颜色 |
git config --global alias.co checkout | git配置别名 |
git config --global https.proxy http://127.0.0.1:1080 | 配置https代理 |
git config --global --unset http.proxy | 取消https代理 |
git config --add core.filemode false | 忽略因为文件权限变化 |
多人协作
git remote | 查看远程库信息 |
git remove -v | 查看远程库信息详情 |
git push origin <分支名> | 将该分支上的所有本地提交推送到远程仓库指定分支 |
git checkout -b <分支名> origin/<分支名> | 将远程指定分支创建到本地指定分支 |
git branch --set-upstream-to=origin/<分支名> <分支名> | 将远程指定分支与本地指定分支建立链接 |
一般情况下,多人协作的流程:
- 首先,可以试图用git push origin 推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
- 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
- 这就是多人协作的工作模式,一旦熟悉了,就非常简单。
- 但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。