Git使用手册是帮助新手完成git快速上手的文档资料,从配置到使用场景,也可以查看常用的命令。想要了解详细的git资料,参考git官方文档。
目录
Git配置
账号配置
使用git之前,需要先进行git配置,配置账号等,这里就只介绍如何配置账号,其他配置参见参考资料。
$ git config –global user.name “carlton”
$ git config –global user.email “carlton@woqugame”
SSH免密码配置
使用SSH配置可以让你不需要每次跟服务器交互的时候输入密码,配置方式点击查看。
Git常用场景
新项目
如果我们使用一个普通的项目,只想把项目用git服务器来管理,可以参照以下步骤。
- 假如你已经有一个项目了,然后进入项目的根目录。
- 使用命令git init初始化项目。
- 使用命令git remote add origin <url> 添加远程仓库的地址。
- 添加和提交本地仓库的文件。
- 使用命令git push -u origin master 推送项目到服务器并建立关联。
带子模块的新项目
如果我们需要开始一个新项目,我们可以用以下步骤来使用git。
- 用AndroidStudio新建一个项目作为主项目。
- 使用命令git init 初始化一个仓库。
- 添加通用框架子模块,通用框架子模块现在分成了3个,L1、L2属于base,L3、L4独立,我们需要添加这三个git库作为主项目的子模块。
- git submodule add [email protected]:octopus/base.git
- git submodule add [email protected]:octopus/L3.git
- git submodule add [email protected]:octopus/L4.git
这样就添加了通用框架作为子项目。
- 使用新项目的方式,把项目和服务器的git仓库联系起来。
克隆项目
如果服务器上其他小伙伴已经开始开发了,你需要加入项目,你就需要克隆服务器的项目到本地,
$ git clone <url> [name]
这个命令会克隆服务器上的项目,最后[name]参数是克隆的时候指定克隆到哪个文件夹里面,也可以不指定,默认使用xxx/name.git中的name。
克隆带子项目的项目
克隆带子项目的项目和普通的一样,只需要多加一个参数—recursive。查看详细内容。
开始工作
现在有了关联的仓库,接下来我们开始工作吧。简单的说一下git服务器的结构,git服务器上通用框架是单独的git仓库,每个app也是单独的仓库。服务器上的仓库分为dev和master分支,我们平时开发的时候都是使用dev分支,master分支是稳定版本的分支。所以一般情况下我们本地仓库的分支名字应该叫dev,而不是默认的master。
如果现在我接到一个需求,首先我们需要新建一个特性分支,这样能保证管理的灵活性。
$ git checkout -b feature
现在我们本地已经在分支feature上了,然后 开发……………………(一万年以后)……,功能开发完成。接下来需要提交修改的代码。一般情况下用下面的命令就够了。
$ git commit -a
填写注释,然后现在使用查看命令git status,可以看到仓库是干净的。
$ git checkout dev
$ git merge feature
$ git branch -d feature
上面三行的意思是:1、切换到dev分支。2、合并我们开发了功能的分支内容到dev。3、删除特性分支。
到此一个小的流程就完成了,开发过程中需要根据自己的实际情况去循环这个过程。
中断并继续工作
如果我们正在分支A上开发一个功能的时候,突然接到一个需求需要马上修改一个严重的bug。这时候我们不需要删除之前的代码,使用如下方式可以方便切换。
- 把A分支保持干净,有两种方式一种是提交当前修改。
- $ git commit -a -m “开发了登录功能的UI”。这个命令的意思是提交代码并使用-m参数来添加简单的注释。
- $ git stash 这个命令是备份当前分支的内容,后面可以通过 $ git stash pop来恢复最近一个保存。不建议用这种方式,只有很简单的工作流程使用这种方式,如果太复杂的流程,使用这种方式你可能会搞混,你需要很清楚你自己在做什么,否则代码回被弄没的几率很大。
- 现在A分支已经很干净了,我们切换到dev去修改bug。
$ git checkout dev
$ git checkout -b fixed
上面的意思是:1、切换回我们需要修改bug的分支dev。2、因为我们需要修改bug,所以新建一个修改bug的分支fixed。
……(一万年以后)……Bug修改完成了。
$ git commit -a -m “bug修改完成”
$ git checkout dev
$ git merge fixed
$ git branch -d fixed
提交代码,然后回到dev分支合并修改bug的分支,最后删除分支。
接下来,我们继续回到之前的A分支继续堆功能。
$ git checkout A
……(吧啦吧啦吧啦吧啦吧啦)…… 功能开发完成,可以提交合并了。
在带有子模块的项目工作
带有子模块的项目,有时候我们需要修改子模块的内容。也要让子模块可以和它自己的git远程仓库同步代码。使用方式和普通的一样,最关键的问题是,要在哪个子模块使用git命令就一定要让命令工作在子模块,比如要进入base模块,可以使用$ cd base命令先进入子模块,这时候的git命令是对base模块生效的。
现在我们开始对子模块进行操作。
$ cd base ## 进入子模块
$ git status ## 查看子模块状态(如果你足够清楚项目情况,可以不用)
$ git commit -a ## 提交子模块内容
$ git pull origin dev ## 更新子模块的内容,如果没有更新可以不使用,如果服务器又新版本,你在使用push 命令的时候,git会提示你使用这条命令。
$ git push origin dev ## 推送本地修改到服务器。
$ cd .. ## 切换到主项目目录。
$ git commit -a ## 提交这次子模块的修改。
和服务器同步代码
Git的提交是提交到本地仓库的,如果要跟服务器同步需要用下面的方法。
$ git pull origin dev
同步服务器的dev分支。
……(解决冲突)……解决完成。
$ git commit
解决冲突后默认会有注释,意思是合并了服务器的代码,这里默认就可以了。
$ git push origin dev
推送本地代码到服务器,到此完成代码的同步。
Git常用命令
查看状态
$ git status
添加文件到git
$ git add <文件名|目录名称>
添加一个文件或者目录到git(让git追踪该文件或者目录)
$ git add.
添加全部未追踪的文件(.gitignore匹配的数据除外)
提交数据
$ git commit [-m] [-a]
-m 参数是添加注释例如:git commit -m “hello, world”
-a 如果修改的文件没有通过git add 命令添加,使用这个参数的意思就是:先git add . 然后git commit。
更新数据
$ git pull [url] [branch]
如果你的分支绑定了远程分支,可以直接使用git pull更新数据,如果没有绑定可以在push的使用-u参数绑定,也可以通过指定url和分支名称来更新:git pull origin dev(更新dev分支)
$ git fetch [url] [branch]
只更新数据到本地仓库,但是不合并。和git pull的区别在于git pull等于执行了两个命令,一个是抓取数据git fetch,一个是分支合并git merge origin/dev.如果使用数据抓取可以通过新建分支或者合并分支的方式更新仓库的代码到本地代码。例如:git fetch更新完成后合并代码git merge origin/dev.这两个操作等同于git pull
推送数据
$ git push [-u] [url] [branch]
推送分支到服务器,-u参数代表和远程分支绑定,
新建分支
$ git branch new_branch
新建一个名叫new_branch的分支,
$ git checkout -b new_branch
新建一个名叫new_branch的分支,并切换到new_branch分支
切换分支
$ git checkout [-b] new_branch
切换到new_branch分支,如果没有这个分支可以通过添加-b参数新建这个不存在的分支,
删除分支
$ git branch -d new_branch
删除new_branch分支,前提是这个分支必须已经合并到其他分支了,如果没有合并不允许删除。
$ git branch -D new_branch
强制删除new_branch,不管new_branch是否合并到其他分支。注意这里的D是大写。
删除远程分支
$ git push –delete remote_branch
删除服务器上的remote_branch分支。
重命名分支
$ git branch -m old_branch new_branch
重命名本地分支old_branch成new_branch。
$ git push –-delete remote_old_branch
$ git push -m remote_old_branch remote_new_branch
$ git push origin remote_new_branch
重命名远程分支remtoe_old_branch成remote_new_branch。没有直接的命令修改远程分支名字,只能先删除,然后本地修改后,推送新分支到服务器。
给项目添加子模块
$ git submodule add <url>
给当前的项目添加一个子模块。子模块主要用于添加本项目之外的其他git项目,但是这些项目又想使用单独的git仓库去管理。
克隆含有子模块的项目
$ git clone <url>
$ git submodule init
$ git submodule update
第一行是用于克隆项目和普通的git项目一样,第二行是初始化子模块,第三行是更新子模块内容。这样我们就克隆了一个含有子模块的项目。
$ git clone –recursive <url>
上面的三个命令等同于添加了参数的clone命令。可以通过添加参数 –-recursive 来实现更简单的克隆子模块。
haolihai