###git使用规范和常用命令 #####version: 0.1 1111
git是一个分布式版本控制系统,所有的提交都先存储在本地,因此在没有网络时也可以正常提交,等到网络连通时,在将所有的commit全部push到远程仓库即可。
git记录的是目录和文件的整体差异,而不是像SVN等其它VCS一样记录的是文件内容具体的差异。
查看某一个命令的帮助文档: git help 命令名
或者 git 命令名 --help
。
输入命令是可以使用 tab键
来补全命令。
git自带的图形化工具:gitk
,可以在图形化界面中查看git的提交历史和文件内容差异。
git所有的配置都是通过命令git config
来完成的。全局配置文件位于用户的主目录(~/.gitconfig),每个项目的单独配置文件位于本地仓库目录的.git隐藏目录下。
以下为git config常用配置:
//命令格式: git config --选项 属性名 属性值
//命令属性后有值则表示设置属性值,没有表示查看属性值
git config --list //查看当用用户的所有默认配置
git config user.name 'jack'//设置代码提交者
git config user.email 'jack@gmail.com' //设置联系邮箱
git config core.editor //设置git默认编辑器
git config merge.tool //设置冲突合并工具
//其它自定义配置,请参考文档: git config help
git仓库分为本地仓库和远程仓库。本地仓库存位于客户端,是存在于服务器上的远程仓库的完整镜像。默认的仓库名字为origin,初次克隆远程仓库时会自动的在本地创建一个mater分支,用来跟踪远程仓库的master分支。
本地仓库的创建有两种方式:
新建一个本地文件夹,使用命令 git init
将它初始化为一个本地git仓库。然后再添加到远程仓库。
在服务器上创建一个远程仓库,使用命令 git clone
将它克隆到本地。
//和仓库相关常用命令 git init //初始化本地仓库 git clone url //克隆远程仓库 git remote -v //查看远程仓库详细信息 git remote add origin url //将本地仓库推送到远程服务器 git remote rename origin namexxx //将远程仓库名由origin改为namexxx git remote rm origin //删除远程仓库 git remote show origin //查看远程仓库的具体分支信息
暂存和提交都是针对项目中文件的变化所做的操作。
文件在git中的三种基本状态:已提交、已修改、已暂存。还有一种特殊的文件状态:未跟踪,指的是还没有纳入版本版本管理的新建文件。
文件在git中流转的三个区域:工作目录、暂存区、本地仓库。 执行push操作后,文件流转到远程仓库。
暂存(add):将工作区已修改的文件快照保存到暂存区,等待下一次的提交。
提交(commit):将暂存区保存的文件仓库提交到本地仓库。 推送(push):将本地仓库中新的提交更新到远程仓库。
拉取(fetch或者pull):将远程仓库中的其他人的提交拉取到本地本地仓库。
在拉取远程分支的最新内容,推荐使用fetch和merge而不是直接pull,具体请参考详细说明。
暂存和提交常用命令:
//暂存命令
git add file //将某一个文件快照添加到暂存区
git add [-A][.] //将全部已修改文件快照添加到暂存区
git add -i //使用交互式暂存,将多个修改的已追踪文件按逻辑分类进行分批提交
//提交命令
git commit -m 'commit desc' //将暂存区的快照提交到本地仓库
git commit --amend //修改最后一次提交
git commit -am 'commit desc'//直接将工作区的已修改文件提交到本地仓库
//推送命令
git push origin fromLocal:toRemote //将分支上的内容推送的远程仓库的分支,例如:git push origin master:master,注意:master:master中间不能有空格。
//拉取命令
git pull master //拉取远程master分支到本地的跟踪分支,并自动合并到本地master分支,若遇到冲突则手工合并冲突。
git fetch origin fromRemote:toLocal //从远程仓库分支拉取到内容到本地仓库的跟踪分支,等待进一步的手工合并到本地分支。
分支是git最重要和最灵活的一项功能,几乎所有的操作都是在分支上进行的。
在git中,分支的概念和其它VCS截然不同,分支的本质是一个指针(也可以叫引用),创建一个新分支实际上是新建一个分支指针,它指向当前所在分支的最新一次提交。因此,在git中对分支的创建、删除、修改、切换等操作变得非常高效和迅速。
分支的分类:
本地分支(local):默认生成的master分支或者在本地创建的自定义分支。
跟踪分支(tracked):无法进行编辑的本地分支,是一个特殊的本地分支,主要用于根据对应远程分支的提交记录。使用fetch命令拉取远程分支的内容就是先将远程分支上的最新提交拷贝到本地,然后移动跟踪分支的指针指向最后一次提交。跟踪分支的名字一般以remote/origin/
开头。
远程分支(remote):存在于远端仓库的分支,可以分享给其它的协作者。
分支操作常用命令:
//查看分支
git branch //不带任何选项表示查看本地分支列表
[-a] 查看所有分支
[-r] 查看跟踪分支
//分支操作
git branch test //创建分支
git checkout test //切换到新的分支
git checkout -b test //创建并切换到当前分支
git branch [-d][-D][-rd] branchName //删除分支,三个选项分表示删除本地分支、强制删除本地分支、删除本地跟踪分支
//推送和拉取分支
git push origin master:master//推送本地master分支到远程的master分支
//拉取所有远程分支
git fetch origin
//创建远程分支的本地跟踪分支,可以直接使用git push和git pull 直接推送和拉取内容
git checkout -b test origin/test //创建test分支来关联远程的test分支
git checkout --track origin/test //使当前所在分支关联远程的test分支,1.6.2 以上版本的 Git可以使用
git fetch origin master:master //拉取远程分支到本地的跟踪分支等待合并。 **注意**:在当前分支不能使用fetch当前分支的内容。比如:要想fetch master分支的最新内容,必须在test分支才能执行fetch命令。
git pull master //默认拉取远程master分支到本地并自动合并到master
分支的合并(merge)和冲突解决操作:
//合并操作,假设当前所在分支为master
git merge test //将test分支合并到当前所在分支master
//如果合并中遇到hello.txt冲突,手动解决冲突,之后:
git add hello.txt //将文件标记为冲突已解决
//**注意:** git add命令在不同情况表示不同的含义:对未跟踪文件表示将纳入版本管理,对已修改文件表示将文件快照添加到暂存区,对已解决冲突文件表示冲突已解决。
git commit //最后提交
分支的另一种合并:rebase操作,请参考rebase详细说明
//操作命令,假设当前所在分支为test
git rebase master //rebase test分支上的提交到master分支
//遇到冲突后,手动解决冲突,之后操作:
git add filename 或者 git add -u
git rebase --continue //继续执行rebase,直到完全合并结束。若再次遇到冲突,重复上述步骤
//如果中途想结束rebase
git rebase --abort
其它常用操作
提交历史
在执行了一系列commit后,如果想要查看提交历史,使用命令: git log
//查看提交历史常用命令参数,更多请参考帮助文档:git help log
git log //默认按时间降序列出所有的提交历史
[-n] //查看前n次的提交日志
[--pretty] //按一定格式显示提交日志,例如:git log --pretty=oneline,按一行的格式显示日志
各种撤销操作
常用的恢复操作在输入git status
命令,可以得到提示
//取消暂存区的快照
git reset HEAD^
//将工作区修改恢复为上一次提交的内容
git checkout -- filename
关于其它撤销的帮助
3. 储藏功能(stash)
>经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。
//储藏命令
git stash list //查看栈中的所有储藏
git stash //储藏当前分支的工作目录和暂存区
git stash apply [stash@{1}] //在当前分支上应用储藏,若没有指定参数,默认应用储藏栈中最顶端的储藏,恢复后工作区是干净的,储藏前的修改都被保存到暂存区
git stash apply --index //恢复到原来的操作
git stash drop //删除储藏栈上的储藏,默认删除栈最顶端的那个
git stash pop //从栈中取出某个储藏并应用
git stash branch test //恢复储藏的工作然后在新的分支上继续当时的工作
4. 打标签(tag)
一般常见的工作流有三种,请参考详解:
集中式工作流: 应用最广泛的工作流,大多数开发流程都属于这种类型。
集成管理者工作流:github上的开源项目使用的就是这种工作流。
司令官与副官工作流:最不常用的工作流,只有超大型项目才会用到,比如Linux内核开源项目的维护。
基本的集中式工作流演示(可以根据实际开发自定义):
//初始化克隆远程仓库
git clone https://github.com/jack/demo.git
//克隆结束,查看本地分支
git branch -a //存在一个本地分支,一个跟踪分支
//创建一个本地dev分支,用于存储开发中的代码和测试代码
git checkout -b dev //创建并切换到dev分支
//将本地开发分支推送到远程仓库,用于在小组内共享开发分支
git push origin dev:dev
//在本地开发每一个子需求的时候,创建临时分支feature1
git chekcout -b feature1
//新增,修改文件来完成需求
vim somefile.txt
//提交到仓库
git status
git add .
git commit -m 'complete feature1'
//合并feature1的提交到dev
git checkout dev
git merge featrue1 //若有冲突则手动解决冲突
//推送dev到远程仓库前先fetch,看是否有其他协作者提交的代码
git checkout feature1
git fetch origin dev:dev
//如果有则合并
git checkout dev
git rebase origin/dev //合并过程有冲突则解决冲突
//合并结束后推送本地dev到远程dev
git push origin dev:dev
//如果本地dev上的代码测试通过,需要发布1.0版本
//合并dev到master
git checkout master
git merge dev
//可以选择是否打版本号来标记当前版本所在节点
git tag version1.0
//推送master到远程分支,推送前先fetch,操作同dev分支操作一样
git push origin master:master
//操作结束,可以使用远程仓库master分支上的稳定version1.0进行发布操作。
#git
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。