随着对git不断使用,逐步进行学习和理解,现把学习整理成一系列基础内容,供大家参考和讨论。本篇介绍如何开始开展git项目,主要包括:
- 开始一个git项目
- 提交变更过程
一、如何开始介入git项目(以下是在mac下范例):
-
方式一:创建git项目
1) 将指定目录成为git项目,两种形式:- 进入目录,运行git init
- 运行 git init <要加入git的目录>,eg: git init ~/test
-
方式二:下载已有的git仓库
1)从远端服务器上下载已有的项目,两种形式:- 多数使用:git clone [url]
- 也可使用:git clone [url] [renameDir],可以为项目目录重新命名或者为解决下载项目多份发生冲突
两种形式区别:第一个与服务器上下载内容一样的,第二个对下载的内容的目录进行了重命名
2)分别使用两种方式,见下图,产生两个文件目录:
3)对于下载的url,git可以使用四种协议来传输数据:本地传输,SSH协议,Git协议和HTTP协议
- 一般使用SSH协议和HTTP协议较多,上面的例子中使用SSH协议
- 想要了解更多协议相关内容,可查看服务器上git协议
4) git clone下载的项目,是可查看,上传到服务器的所有git操作记录,包括对项目操作的任何人的任何操作(eg:查看历史提交,各分支情况等)
- 因为git clone时,把项目下所有操作记录的.git目录完整copy
tips:
1.若忘记本地git的下载目录,可以从 项目主目录/.git/config 文件种查看远程服务端地址
2.了解更多可查看上一篇git学习记录(一)——git工作原理(在下面的操作中,不理解也可多翻看)
二、开始git操作——提交变更
主要操作: 提交到本地仓库和推送到远程仓库
1.提交修改变更到本地仓库,命令:
- git add .
- git commit -m "注释信息"
1) 命令:git add ,有两个作用:
- 作用一:把新文件添加到git管理中(添加到索引index中),git add [文件名列表]
实际操作:
-
1.上图实例,添加两个文件,一个文件进行提交(git add ),一个不提交
2.使用git status查看各个文件状态(没提交的没有添加到索引中,eg:test2.txt)
tips:只有将文件加入到索引中,这个文件才会收到git的监管,从而进行版本控制
-
作用二:提交修改,更新索引(index)信息
下面实例中,对文件进行修改,可查看两次git diff内容区别- 第一次:将test2.txt加入到git管理中(git add test2.txt),然后添加内容“Hello world!”:
使用git diff查看,下图所示(与index记录有差异): -
第二次:使用git add test2.txt提交修改
使用git diff查看下图所示(无差异,提交成功):
- 第一次:将test2.txt加入到git管理中(git add test2.txt),然后添加内容“Hello world!”:
tips:一般使用git add .(把当前工作目录都提交),还可以使用git add * 一样的效果
2)命令:git commit -m "注释信息",作用是将内容真正存储到本地仓库
注释信息很重要,要简练清晰,为代码维护和团队合作提供重要参考依据
- -m 是为提供提交注释,若忘记写,git会自动给你打开一个编辑器引导你提交信息,最好养成直接加-m的习惯
-
下面是对文件进行修改后,commit前后,查看本地文件与本地仓库的不同(使用git diff HEAD查看),操作步骤如下:
- 使用git diff HEAD查看情况:
第一次,如下图是有差异;第二次没有差异(没有截图)
tips:
1.本地仓库中最新存储内容是由HEAD指针指向的,所以,git diff HEAD无差异时,即工作目录与本地仓库内容一致
2.特殊写法:git commit -a 文件名
1)对已加入git管理的文件,一步提交到本地仓库(自动执行git add)
2)新增加文件,不可这样,git必须先执行git add
3)辅助命令:git status,查看本地文件目录与索引(index)的状态
- 除上述用法,还可加参数“-s” , git status -s以简短的形式输出内容
-
下图中,依次是test3.txt没有加入git,加入git,对test3.txt进行修改,三个状态变化
3)"AM"表示表示索引中新增状态,但本地文件已修改;
1)??表示没有加入到git;
2)"A "表示缓存中新增状态,并且与本地一致;
4)辅助命令:git diff(实例见上)
- git diff :查看索引(index)与本地工作目录的区别
- git diff HEAD: 查看本地仓库与与本地工作目录的区别
2.推送到远程仓库
-
命令:git push [alias] [branch]
- alias是远程仓库的别名,branch是要上传的分支
- alias和branch的对应关系,可到.git文件夹下config文件查看,一般只是用一对,多对应关系不多用
- 只运行git push,是按照默认配置推送
- 从远程git clone的项目,默认:git push origin master
1)本地新建的git项目,远程仓库需手动添加(以github为例)
-
添加远程仓库(eg:git@github.com:greatjing/git_exercise.git)
-
先在远程服务端(github)上新建一个项目*(也可是其他,比如公司类的服务端),实例操作如下:
-
2)将本地git项目上传到对应的远程仓库:
- 步骤一:进入本地git项目目录
- 步骤二:git remote add [alias] [url] ,为远程仓库添加别名“alias”,url是在远程仓库中新建地址
- 步骤三:git push -u [alias] [branch],推送本地的“branch”分支到远程仓库“alias”
-
操作实例如下:(ps:test_0926已加入git)
1.上图中第一次向远程仓库推送失败,因为本地的项目中是空文件,git不允许推送空内容
2.若上一次push后,远程仓库有新变更,此次push会不成功,需要pull远程仓库内容与本地内容merge,再push提交
3.必须对远程仓库有写权限才能push。公司的仓库可以申请,一般对开源项目push,需要申请合并,仓库管理员去merge
详细见下一节:零基础学习git(三)——代码拉取,回滚和撤销
3)其他
-
列出远程仓库
- git remote ,列出远程仓库别名
-
git remote -v,列出别名的实际地址
上图列了两个链接,因GIT为每个远程仓库分别添加推送和获取的链接,为读写使用不同协议,没有特殊要求链接都是一致的
-
删除远程仓库
- git remote rm [alias]
-
远程仓库重命名
- git remote rename [oldname] [newname]
-
显示远程仓库与本地仓库同步情况
- git remote show [alias]
参考:
1、https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8
2、https://segmentfault.com/a/1190000002783245