git 命令

来源:互联网 发布:linux faikmm 编辑:程序博客网 时间:2024/06/05 10:26

###git使用规范和常用命令 #####version: 0.1 1111

  • git简介

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分支。

本地仓库的创建有两种方式:

  1. 新建一个本地文件夹,使用命令 git init 将它初始化为一个本地git仓库。然后再添加到远程仓库。

  2. 在服务器上创建一个远程仓库,使用命令 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)和冲突解决操作:

//合并操作,假设当前所在分支为mastergit merge test //将test分支合并到当前所在分支master//如果合并中遇到hello.txt冲突,手动解决冲突,之后:git add hello.txt //将文件标记为冲突已解决 //**注意:** git add命令在不同情况表示不同的含义:对未跟踪文件表示将纳入版本管理,对已修改文件表示将文件快照添加到暂存区,对已解决冲突文件表示冲突已解决。git commit //最后提交

分支的另一种合并:rebase操作,请参考rebase详细说明

//操作命令,假设当前所在分支为testgit rebase master //rebase test分支上的提交到master分支//遇到冲突后,手动解决冲突,之后操作:git add filename 或者 git add -ugit rebase --continue //继续执行rebase,直到完全合并结束。若再次遇到冲突,重复上述步骤//如果中途想结束rebasegit rebase --abort
  • 其它常用操作

    1. 提交历史
      在执行了一系列commit后,如果想要查看提交历史,使用命令: git log

       //查看提交历史常用命令参数,更多请参考帮助文档:git help log git log //默认按时间降序列出所有的提交历史 [-n]  //查看前n次的提交日志 [--pretty] //按一定格式显示提交日志,例如:git log --pretty=oneline,按一行的格式显示日志
    2. 各种撤销操作
      常用的恢复操作在输入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//在本地开发每一个子需求的时候,创建临时分支feature1git chekcout -b feature1//新增,修改文件来完成需求vim somefile.txt//提交到仓库git statusgit add .git commit -m 'complete feature1'//合并feature1的提交到devgit checkout devgit merge featrue1 //若有冲突则手动解决冲突//推送dev到远程仓库前先fetch,看是否有其他协作者提交的代码git checkout feature1git fetch origin dev:dev//如果有则合并git checkout devgit rebase origin/dev //合并过程有冲突则解决冲突//合并结束后推送本地dev到远程devgit push origin dev:dev//如果本地dev上的代码测试通过,需要发布1.0版本//合并dev到mastergit checkout mastergit merge dev//可以选择是否打版本号来标记当前版本所在节点git tag version1.0//推送master到远程分支,推送前先fetch,操作同dev分支操作一样git push origin master:master//操作结束,可以使用远程仓库master分支上的稳定version1.0进行发布操作。#git
原创粉丝点击