feat:新功能(feature) fix:修补bug docs:文档(documentation) style: 格式(不影响代码运行的变更)注意不是 css 修改 refactor:重构(即不是新增功能,也不是修改bug的代码变更) test:增长测试 chore:构建过程或辅助工具的变更 scope: commit 影响的范围, 好比: route, component, utils, build... footer: 一些备注, 一般是 BREAKING CHANGE 或修复的 bug 的连接.
init_add_status_commit_pushcss
基础概念html
已提交(committed):已提交表示该文件已经被安全地保存在本地数据库中了;git
已修改(modified):已修改表示修改了某个文件,但尚未提交保存;github
已暂存(staged):已暂存表示把已修改的文件放在下次提交时要保存的清单中。shell
用户信息数据库
$ git config --global user.name "Teaism"
$ git config --global user.email chenliangf1223@sina.comvim
配置文本编辑器segmentfault
$ git config --global core.editor emacs安全
查看配置信息服务器
$ git config --list
查阅某个环境变量的设定
$ git config user.name
删除某个配置项
$ git config (--local、--global、--system) --unset user.name
获取帮助
$ git help config
初始化Git仓库
$ git init
从现有仓库克隆
$ git clone git://github.com/schacon/grit.git NewFileName
添加文件到仓库
$ git add Files
建立.ignore文件
$ touch .gitignore
删除文件(禁用:会从工做目录和暂缓中同时删除。)
$ git rm Files
$ git add -A (推荐)
它会把咱们未经过 git rm 删除的文件所有stage
重命名文件
$ git mv file_from file_to
检查当前文件状态
$ git status
提交已暂存区(stage)的内容
$ git commit -m '提交说明'
查看日志
$ git log (--pretty=oneline)
** 查看文件差异
$ git diff #是工做区(work dict)和暂存区(stage)的比较
$ git diff --cached #是暂存区(stage)和版本库的比较
$ git diff HEAD -- Files #工做区和版本库的区别
** 撤销修改
[https://segmentfault.com/a/1190000007070302]
tips:命令 git checkout –readme.txt 意思就是,把readme.txt文件在工做区作的修改所有撤销,这里有2种状况,以下:
1) readme.txt自动修改后,尚未放到暂存区,使用 撤销修改就回到和版本库如出一辙的状态。
2) 另一种是readme.txt已经放入暂存区了,接着又做了修改,撤销修改就回到添加暂存区后的状态。
工做区的代码想撤销 ( Files 自修改后尚未被放到暂存区,如今,撤销修改就回到和版本库如出一辙的状态;)
$ git checkout -- Files (git checkout -- . 撤销全部文件,注意 ' . ')
add到暂存区的代码想撤销 (Files 已添加到暂存区后,又修改,如今,撤销修改就reset回到添加到暂存区后的状态。再checkout就是恢复到 版本库同样的)
$ git reset HEAD Filesname (git reset HEAD . 将全部文件)
$ git checkout -- Files
删除文件恢复
删除文件 $ git rm [Filenames] or rm [Filenames]
只要没有commit以前,若是我想在版本库中恢复此文件,可使用以下命令:
$ git checkout — b.txt
notes: reset指针直接指向上次提交(慎用),revert 是从新提交(推荐)。
$ git reflog OR $ git log --pretty=oneline (查看提交历史)。
$ git reset --hard [hash] (推荐这个,hash) OR $ git reset --hard HEAD@{$} ($向前回退几个版本)
穿梭前,用git log能够查看提交历史,以便肯定要回退到哪一个版本。
要重返将来,用git reflog查看命令历史,以便肯定要回到将来的哪一个版本。
从暂缓区删除文件(但工做区代码并未删除)
$ git rm --cached
GIT重置命令
reset命令能够改变.git/refs/heads/master下分支的引用,而不是永远指向最新的提交ID。
reflog(.git/logs/refs/heads/master)命令恢复
重置引用后提交历史信息会丢失,这时可使用reflog命令查看操做日志,以便进行恢复操做
git reflog show master |head -5 显示master分之最近五次操做日志
git reflog -1 显示HEAD分支最近一次操做日志
reset命令的两种用法
用法一:git reset[-q][<commit>][--]<paths>
用法二:git reset[--soft|--mixed|--hard|--merge|--keep][-q][<commit>]
第一种用法不会重置引用和工做区,而是用commit下的文件替换暂存区文件,至关于撤销git add
第二种则会重置引用,但会根据不一样的参数从而 影响 工做区或者暂存区,其中commit也能够省略,默认为HEAD
使用参数--hard 工做区,引用、暂存区所有替换为commit
使用参数--soft 只更改引用,工做区和暂存区不影响
使用参数--mixed(不写默认) 只更改引用和暂存区,不影响工做区
建立并切换到新的分支
$ git checkout -b
至关于:
$ git branch
$ git checkout
查看分支列表
$ git Branch
合并分支
合并Master 和 Branch1 分支:
$ git checkout Master
$ git merge Branch1
合并分支时同一文件同一部分冲突
此时须要到文件中手动保留须要的部分,而后add--commit。
删除分支( D 表示强制删除)
$ git branch -d
$ git branch -D
查看分支的合并状况
$ git log (--graph --pretty=oneline --abbrev-commit)
禁用快捷合并分支
$ git merge --no-ff -m "comments"
查看全部分支(分支颜色区分:白色-本地,绿色-当前,红色-远程)
$ git branch -a
切换远程分支
$ git checkout remotes/origin/master
删除远程分支
$ git branch -r -d
$git push origin -d
拉取远程分支并建立为本地分支
$ git fetch origin dev:dev
Explain:
修复bug时,咱们会经过建立新的bug分支进行修复,而后合并,最后删除;
当手头工做没有完成时,先把工做现场git stash一下,而后去修复bug,修复后,再git stash pop,回到工做现场。
steps: (以master,dev,bug01分支为例):
储存dev当前工做区: $ git stash
切换到master分支上:
新建并切换分支bug01: $ git checkout -b
在新的bug01分支上修复,记得提交;
把bug01分支合并到master分支上,推荐'禁用快捷合并'方式:$ git merge --no-ff -m "comments"
切换到dev分支上
查看先前“储存‘的工做区: $ git stash list
恢复到指定处: $ git stash apply stash@{$}
成功!
$ git stash //把当前工做现场“储藏”起来,等之后恢复现场后继续工做
$ git stash list //列出stash中的全部暂存的内容
方式一:git stash apply //仅恢复,;
$ git stash apply stash@{$} //还能够指定恢复哪个,stash内容并不删除
$ git stash drop //来删除,stash(可是不肯定删除哪一个??)
方式二:git stash pop //恢复的同时把stash内容也删了(推荐)
参考: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000
$ git bisect
查看已有标签列表
$ git tag
新增标签
$ git tag -a v1.2.0 -m 'my version 1.2.0'
后期加注标签
$ git tag -a v1.2.0 9fceb02 (9fceb02为提交时校验和前几位)
推进单个标签到远程服务器
$ git push origin v1.2.0
推进全部标签到远程服务器
$ git push origin --tags
退出vim编辑器:双击 D ,按了ESC后输入命令 :wq!
修改后 保存: ESC :wq 回车键
修改后 不保存:ESC :q 回车键
单单 git diff 不过是显示尚未暂存起来的改动,若要看已经暂存起来的文件和上次提交时的快照之间的差别,能够用 git diff --staged;
**远程操做的第一步,最好从远程主机克隆一个版本库: git clone. 否则容易出现 not shell access
clone-pull-fetch-push
测试远程仓库连接是否成功
$ ssh -T git@github.com
测试443端口是否可用
$ ssh -T -p 443 git@ssh.github.com
添加远程仓库
$ git remote add origin git@github.com:Teaism/gitremote.git
展现远程仓库信息
$ git remote show mcvideo(别名)
查看当前远程仓库
$ git remote -v
推送到远程仓库
$ git pull origin master/dev (第一次推送以前需拉取远程的)
$ git push -u origin master
$ git push origin master (之后的推送)
**代码合并【注:pull=fetch+merge(拉取并合并=拉取+合并)](最好不要直接用pull,而是分开用) 。
$ git pull (mcvideo master) 无括号里表示拉取全部并合并
$ git fetch (mcvideo master) 无括号里表示拉取全部
$ git merge dev (合并dev到当前分支)
直接从远程origin的dev分支建立到本地dev来:
$ git checkout –b dev origin/dev
$ git pull origin master/dev/test 从远程仓库拉取指定分支
tips: git pull若是失败了,缘由是没有指定本地dev分支与远程origin/dev分支的连接,根据提示,设置dev和origin/dev的连接:
$ git branch --set-upstream dev origin/dev (// 本地远程分支关联: git branch --set-upstream-to=origin/ <远程分支名> <本地分支名> 如设置当前分支,第二个参数可省略,;)
origin: 如未指定,表示远程仓库的别名
合并pull两个不一样的项目:
报错:fatal: refusing to merge unrelated histories
解决方法:git pull origin master --allow-unrelated-histories
冲突:
一、放弃工做区修改,
本地仓库代码彻底覆盖本地工做区间,具体指令以下:
$ git checkout head .
(注意: 别遗漏 "head" 后的 " ." )
而后更新远程仓库的代码就不会出现冲突了:
$ git pull
二、解决冲突后提交本地修改
$ git stash
$ git stash save "这些是注释啦"
$ git pull
$ git stash pop
手工解决冲突,
而后add-commit-push
删除远程分支
$ git push origin --delete Branchname
远程仓库的重命名和删除
$ git remote rename pb paul
$ git remote rm paul
从commit里取消去某个文件夹的跟踪
git rm -r --cached path_to_your_folder/
## 合并几个commit
[http://zerodie.github.io/blog/2012/01/19/git-rebase-i/]
git merge 和 git rebase 的区别: [http://blog.csdn.net/wh_19910525/article/details/7554489]
$ git rebase -i commit-hash(不改变的那个)
进入vim
pick 的意思是要会执行这个 commit (第二新提交)
squash 的意思是这个 commit 会被合并到前一个commit (最新提交,合并到第二新提交)
Esc:wq ,保存并退出。成功。
git log --pretty=oneline 查看结果。
如操做错误随时终止 $ git rebase --abort,会回到未开始合并以前的状态。
git pull # 抓取远程仓库全部分支更新并合并到本地
git pull --no-ff # 抓取远程仓库全部分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支
git co --track origin/branch # 跟踪某个远程分支建立相应的本地分支
git co -b
git push # push全部分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则建立,用于初始化远程仓库)
git push origin
git push origin
git push origin :
GitHub
git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址
git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm
建立远程仓库
git clone --bare robbin_site robbin_site.git # 用带版本的项目建立纯版本仓库
scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器建立纯仓库
git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址
git push -u origin master # 客户端首次提交
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,而且track
git remote set-head origin master # 设置远程仓库的HEAD指向master分支
也能够命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop
参考:[http://www.cnblogs.com/cspku/articles/Git_cmds.html]
[http://shaofan.org/git/]