git 常用命令
创建仓库:
git init
添加邮箱:
git config --global user.email "email@example.com"
添加用户:
git config --global user.name "Your Name"
查看状态:
git status
添加文件到stage区:
git add <filename ...>
提交文件到仓库:
git commit -m "explanation"
查看log:
git log [--pretty=oneline]
查看reflog:
git reflog
版本回退:
git reset --hard <版本id>
回退到上一版本也可这样:
git reset --hard HEAD^
在工作区修改了文件,但还没add到stage区,可以这样撤销工作区的修改:
git checkout -- <filename...>
已经add到stage区,要撤销stage区:
git reset HEAD <file...>
如果已经commit到本地版本库了: 看上面版本回退命令
在工作区删除文件后,再用:
git rm <file...>
之后再用 commit 提交到本地版本库. (也可直接用 git rm <file...>
删除文件,再提交. 不推荐这样)
远程github仓库
创建ssh key:
ssh-keygen -t rsa -C "email@example.com"
(将会在home/.ssh/目录生成 id_rsa 和 id_rsa.pub 文件。然后将id_rsa.pub的内容复制到自己github的账号中.)
查看以存在的远程分支:
git remote
查看更详细信息:
geti remote -v
关联一个远程github仓库:
git remote add origin git@github.com:githubAccountName/repository-name.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容.
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改.
从github克隆仓库:
git clone git@github.com:githubAccountName/repository-name.git
查看分支:
git branch
创建分支:
git branch <branchName>
切换分支:
git checkout <branchName>
创建并切换分支:
git checkout -b <branchName>
将某分支合并到当前分支:
git merge <branchName>
合并分支(禁止快速合并):
git merge --no-ff <branchName>
删除分支:
git branch -d <branchName>
强行删除没有合并的分支:
git branch -D <branchName>
查看图形log:
git log --graph --pretty=oneline --abbrev-commit
bug分支
引用:
概览:master合并merge解决好的bug后,不要先把dev解印,先合并master,获取里面的bug方案后,在解印。解印时会有提示冲突,需手动改一次文件。
1:在 dev 下正常开发中,说有1个bug要解决,首先我需要把dev分支封存stash
2:在master下新建一个issue-101分支,解决bug,成功后
3:在master下合并issue-101
4:在 dev 下合并master, 这样才同步了里面的bug解决方案
5:解开dev封印stash pop,系统自动合并 & 提示有冲突,因为封存前dev写了东西,此时去文件里手动改冲突
6:继续开发dev,最后add,commit
7:在master下合并最后完成的dev
代码过程如下:
$ git stash
$ git checkout master
$ git checkout -b issue-101
//去文件里修bug...
$ git add README.md
$ git commit -m "fix-issue-101"$ git checkout master
$ git merge --no-ff -m "m-merge-issue-101" issue-101
$ git branch -d issue-101$ git checkout dev
$ git merge --no-ff -m "dev-merge-m" master$ git stash pop
//提示冲突,去文件手动改正
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md//继续开发 ... ... ,完成后一并提交
$ git add README.md
$ git commit -m "fixconflict & append something"$ git checkout master
$ git merge --no-ff -m "m-merge-dev" dev
$ git branch -d dev
多人开发
推送到远程:
git push origin branch-name
(推送分支”branch-name”到远程,如果远程没有branch-name 分支,将会创建branch-name分支)
强制推送到远程:
git push origin branch-name -f
在本地创建和远程对应的分支:
git checkout -b branch-name origin/branch-name
抓取远程更新:
git pull
(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,根据提示操作即可)
标签
git tag <name> [commit_id]
git tag -a <tagname> -m "comment content" [commit_id]
git tag -s <tagname> -u <gpgKeyId> -m "comment content" [commit_id]
git tag
可以查看所有标签
git push origin <tagname>
可以推送一个本地标签
git push origin --tags
可以推送全部未推送过的本地标签
git tag -d <tagname>
可以删除一个本地标签
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
忽略特殊文件
一些特殊文件的规则: https://github.com/github/gitignore
检查哪些规则忽略的该文件:
git check-ignore -v <file>
配置命令别名
git config --global alias.<you're alias> <command>
例如:
git config --global alias.ci commit
之后就可以用:git ci -m "提交文件了"