如下的git命令是我参考了廖雪峰等关于git的文章以后,根据本身实际工做中接触到的状况而总结出来的一份清单,也是以前在公司用来培训的资料。我会继续补充和修改,欢迎留言指教。php
自报家门 git config --global user.name "RystLee” && git config --global user.email "rystlee100@gmail.com"
git
搭建仓库 git init
(产生的.git是版本库文件)github
查看仓库的情况 git status
app
查看仓库中的文件有什么变化 git diff <file>
ssh
肯定仓库中的文件的变化没问题,将文件添加缓冲区(stage)并提交到仓库(分支) git add <file> && git commit -m "comments"
注:添加到暂存区的文件,再对其进行修改不会影响他们接下来的commit操做ui
查看最近的改动 git log [—pretty=oneline]
this
将文件从缓冲区撤回 git reset HEAD <file>
设计
放弃文件最近一次的修改 git checkout — <file>
版本控制
时光机
回到过去: git reset —hard commit_id 或者 HEAD^
指针
HEAD是指针 指向当前版本 HEAD^^指向上上个版本 HEAD~10指向上第10个版本
返回如今: git reflog
查看提交历史,找到你要的commit_id
删除文件 git rm <file>
远程仓库GitHub
建立SSH Key: 在用户主目录下,看看有没有.ssh目录,若是有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,若是已经有了,可直接跳到下一步。若是没有,ssh-keygen -t rsa -C "rystlee100@gmail.com"
。而后将id_rsa.pub的内容拷贝到github的帐户列表里。
将本地仓库和github上的远程库关联并将本地的内容推送到远程库 git remote add origin git@github.com:rystlee/learngit.git && git push -u origin master
; origin是远程库的默认名称, -u参数负责将本地的master分支与远程的master分支关联起来,在之后的推送时不要加该参数 git push origin master
克隆远程库 git clone git@github.com:rystlee/learngit.git
查看远程库信息 git remote -v
建立分支 git checkout -b dev
(加上-b参数至关于两条命令:git branch dev && git checkout dev
)
合并分支 在dev上工做完成以后,切回master,执行合并,而后删除dev: git checkout master && git merge dev && git branch -d dev
查看全部的分支 git branch
(分支前有*号的表示当前工做的分支)
查看分支合并图 git log —graph
Fast Forward 默认的分支合并图是丢掉分支信息的。禁用fast forward模式会新建一个commit来进行合并,这样就会将分支信息保存下来 git merge —no-ff -m "merge with no-ff" dev
Bug分支 经过创建临时分支来修复bug,可是若是当你在dev上进行的工做还没完成而不能提交时,可使用git stash来把当前的工做现场临时”藏匿”起来,这样git status查看工做区将会是干净的,如今你能够选择在master或者dev上创建一个临时的bug分支来进行修复bug的工作了。完成bug修复任务以后,git stash list查看以前藏匿的”工做现场”记录$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
使用git stash apply stash@{0}
来恢复,使用git stash drop stash@{0}
来删除或者使用git stash pop
将最近的工做现场恢复并删除记录。
通常状况:当手头工做没有完成时,先把工做现场git stash
一下,而后去修复bug,修复后,再git stash pop
,回到以前的工做现场。
Feature分支 开发一个新功能,最好新建一个分支,若是要丢弃一个没有被合并过的分支,能够经过git branch -D <name>
强行删除该分支。若是直接在dev分支上开发该特性,那就可能比较麻烦了。
推送分支到远程库 git push origin master
或推送其余分支,如dev git push origin dev
; Bug分支只用于本地修复bug,就不必推送到远程了,除非老板要看看你每周到底修复了几个bug; Feature分支是否推到远程,取决于你是否和你的小伙伴合做在上面开发。
抓取分支 克隆远程库,默认状况下,只能看到master分支;若是想在dev分支上进行开发,就必须建立远程origin的dev分支到本地,命令是 git checkout -b dev origin/dev
这样就创建了本地dev分支并与远程dev分支的进行了连接
关联分支 若是git pull 或 git push提示”no tracking information”,则说明将本地的分支和远程的分支没有连接,用命令git branch —track <local_branch> origin/<remote_branch>
进行连接。
多人协做的工做模式一般是:
首先,能够试图用 git push origin <branch>
推送本身的修改;
若是推送失败,则由于远程分支比你本地的新,须要先用git pull
试图合并;
若是合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用 git push origin <branch>
推送
标签是版本库的快照,实质是指向某个commit的一个指针。git tag <tagname>
新建一个标签,默认为HEAD,也能够指定一个commit_idgit tag -a <tagname> -m “comments”
能够指定标签信息git tag -s <tagname> -m “comments”
能够用PGP签名标签git tag
查看全部标签git show <tagname>
查看某个标签git tag -d <tagname>
删除标签git push origin <tagname>
推送标签到远程git push origin —tags
推送全部标签到远程git push origin :refs/tags/<tagname>
删除远程库的标签(先将本地要删除的标签干掉,该推送就会将远程的标签同步删除)
让git适当的显示不一样的颜色 git config —global color.ui true
忽略特殊文件 https://github.com/github/git... 而后再加上本身定义的文件,最终获得一个完整的.gitignore文件
设置命令的别名git config —global alias.unstage ‘reset HEAD’ -> git unstage test.php
(将暂存区的修改撤销)git config —global alias.last ‘log -l’ -> git last
(显示最后一次提交信息)
有人丧心病狂git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
比较分支 合并分支以前能够先进行比较 git diff <branch1> <branch2>
关联本地仓库和远程仓库 若是你不是clone的远程仓库,就须要进行关联操做:git remote add origin <server>:<repository>
清理本地对应的远程已经删除的分支 git remote prune origin
比较当前文件和上一次提交之间的差别 git diff HEAD^ HEAD <file>
找出是谁最近改动过代码 git blame <file>
,配合grep使用效果更佳
全部的版本控制系统,其实只能跟踪文本文件的改动,不能跟踪二进制文件内容的改动,不幸的是,Microsoft的Word格式是二进制格式,所以,版本控制系统是无法跟踪Word文件的改动的
Git设计优秀主要是由于它跟踪管理的是修改,而非文件,每一个文件只有一份,git会根据分支记录的修改去控制工做区中的文件的内容。
master也是分支,但倒是主分支,HEAD指针指向的分支是当前工做的分支,良好的开发方式是新建一个分支(名字能够是dev)进行开发,而后add、commit等,最后再切回master进行merge操做,master分支仅用来发布新版本。
本地建立的分支若是不推送到远程,对其余人就是不可见的。
修改文件未提交时切换分支,修改的内容会同步到切换到的分支上,直到提交以后。
.gitignore只能忽略那些原来没有被track的文件,若是某些文件已经被归入了版本管理中,则修改.gitignore是无效的。正确的作法应该是:git rm --cached logs/xx.log,而后更新 .gitignore 忽略掉目标文件,最后git commit -m "We really don't want Git to track this anymore!"