GIT Manual
2017.03.28
codewindy
 热度
℃
常用 Git 命令清单。几个专用名词的译名如下。
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
新建代码库 // 在当前目录新建一个Git代码库$ git init // 新建一个目录,将其初始化为Git代码库$ git init --bare [project-name] // 下载一个项目和它的整个代码历史$ git clone [url]
配置 Git的设置文件为.gitconfig
,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
$ git config --list $ git config -e [--global ] $ git config [--global ] user.name "[name]" $ git config [--global ] user.email "[email address]"
查看3种状态
工作区:项目所在目录
暂存态:add 到暂存区
仓库:commit 到仓库
// objets[git@localhost .git]$ find /home/gi t/jd.git/ .git/objects/ -type f /home/gi t/jd.git/ .git/objects/ ce/a2a9038c107da69ce2222aeb0b47f83df7c1a0/home/gi t/jd.git/ .git/objects/ bf/6399354 dd8bd0538549b9dd254ffe48843c6bf/home/gi t/jd.git/ .git/objects/ 7 f/55 fc6e3fcc69a0cc36a290b671a9a60ff1ee7b// HEAD[git@localhost .git]$ cat HEAD ref: refs/heads/m aster //m aster[git@localhost .git]$ cat refs/heads/m aster 7 f55fc6e3fcc69a0cc36a290b671a9a60ff1ee7b// commit[git@localhost .git]$ git cat-file commit 7 f55 tree bf6399354dd8bd0538549b9dd254ffe48843c6bf author yangqinghua <yqh700@163 .com> 1491724859 +0800 committer yangqinghua <yqh700@163 .com> 1491724859 +0800 is first commit // tree[git@localhost .git]$ git ls-tree bf63 100644 blob cea2a9038c107da69ce2222aeb0b47f83df7c1a0 main.java// blob[git@localhost .git]$ git show cea2 this is a java file // hash[git@localhost jd.git]$ git hash-object main.java cea2a9038c107da69ce2222aeb0b47f83df7c1a0
增加/删除文件 $ git add [file1] [file2] ...$ git add [dir]$ git add .$ git add -p$ git rm [file1] [file2] ...$ git rm --cached [file ]$ git mv [file -original] [file -renamed]
代码提交 $ git commit -m [message] $ git commit [file1] [file2] ... -m [message] $ git commit -a $ git commit -v $ git commit --amend -m [message] $ git commit --amend [file1] [file2] ...
分支 $ git branch $ git branch -r $ git branch -a $ git branch [branch-name] $ git checkout -b [branch] $ git branch [branch] [commit] $ git branch --track [branch] [remote-branch] $ git checkout [branch-name] $ git checkout - $ git branch --set-upstream [branch] [remote-branch] $ git merge [branch] $ git cherry-pick [commit] $ git branch -d [branch-name] $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
标签 // 列出所有tag $ git tag // 新建一个tag 在当前commit$ git tag [tag ] // 新建一个tag 在指定commit $ git tag [tag ] [commit] // 删除本地tag $ git tag -d [tag ]// 删除远程tag $ git push origin :refs/tags/[tagName]// 查看tag 信息 $ git show [tag ] // 提交指定tag $ git push [remote] [tag ]// 提交所有tag $ git push [remote] --tags// 新建一个分支,指向某个tag $ git checkout -b [branch] [tag ]
查看信息 $ git status$ git log $ git log --stat$ git log -S [keyword]$ git log [tag] HEAD --pretty=format:%s$ git log [tag] HEAD --grep feature$ git log --follow [file ]$ git whatchanged [file ]$ git log -p [file ]$ git log -5 --pretty --oneline$ git shortlog -sn$ git blame [file ]$ git diff$ git diff --cached [file ]$ git diff HEAD$ git diff [first-branch]...[second-branch]$ git diff --shortstat "@{0 day ago}" $ git show [commit]$ git show --name-only [commit]$ git show [commit]:[filename]$ git reflog
远程同步 $ git fetch [remote] $ git remote -v $ git remote show [remote] $ git remote add [shortname] [url] $ git pull [remote] [branch] $ git push [remote] [branch] $ git push [remote] --force $ git push [remote] --all
撤销 $ git checkout [file ]$ git checkout [commit] [file ]$ git checkout .$ git reset [file ]$ git reset --hard$ git reset [commit]$ git reset --hard [commit]$ git reset --keep [commit]$ git revert [commit]$ git stash$ git stash pop
其他 // 生成一个可供发布的压缩包$ git archive
Set up GitHub push with SSH keys script Create a repo. Make sure there is at least one file in it (even just the README) Generate ssh key: ssh-keygen -t rsa -C "your_email@example.com" Copy the contents of the file ~/.ssh/id_rsa.pub to your SSH keys in your GitHub account settings. Test SSH key: ssh -T git@github.com clone the repo: git clone git://github.com/username/your-repository Now cd to your git clone folder and do: git remote set-url origin git@github.com:username/your-repository.git Now try editing a file (try the README) and then do: git add -A git commit -am "my update msg" git push
注释规范 feature:新增feature fix: 修复bug docs: 仅仅修改了文档,比如README, CHANGELOG, CONTRIBUTE等等 sql: 新增、修改SQL文件 style: 仅仅修改了空格、格式缩进、符号等等,不改变代码逻辑 refactor: 代码重构,没有加新功能或者修复bug perf: 优化相关,比如提升性能、体验 test: 测试用例,包括单元测试、集成测试等chore: 改变构建流程、或者增加依赖库、工具等 revert: 回滚到上一个版本
每个commit必须包含以上注释,方便review。
分支规范
master分支:生产分支,用于存放发布到生产环境的代码。该分支只能从其他分支合并,不能直接修改推送。
feature/*分支:功能分支,用来开发新功能。开发完成后合入测试或者生产分支,被合并后删除。
hotfix/*分支:补丁分支,用来紧急修复生产环境的缺陷。开发完成后合入测试或者生产分支,被合并后删除。
环境分支:可选项,如果有要求可以加测试环境的分支,规范同生产分支。
每次开发从master分支中检出,命名为feature/version_no,开发完成后通过pull request/merger request合入环境分支进行测试,最后合入master分支。上线部署后,在master分支增加版本号tag。
Label规范
feature:新功能
enhancement:性能优化或者功能增强
bug:问题修复
backend:后端功能(如果前后端代码都有)
frontend:前端功能(如果前后端代码都有)
其他特性label
Issues和Pull Request/Merge Request最好都加上Label,方便分类。