(一)git 的简介
在实际场景中,git 主要作为分布式的团队协作工具来完成团队协作开发。
上图涉及到的四个点:
工作区(workspace):本地电脑存放项目文件的地方。(日常代码放置区)
暂存区(Index/Stage):暂时存放文件的地方,通常使用 git add (装入zsh插件以后简写为:gaa)命令将工作区的文件添加到暂存区里。
本地仓库 (Repository):使用 git commit (装入zsh插件以后添加注释上传简写为:gcmsg -m '注解') 命令可以将暂存区中的文件添加到本地仓库中。
远程仓库(Remote):不是在本地仓库中,项目代码在远程git服务器上,比如项目放在gitlab上,就是一个远程仓库。通常使用 git clone <url> 将远程仓库拷贝到本地仓库中。使用 git push (gp) 将本地仓库的暂存文件推送到远程仓库。
总结:我们可以简化的把一个基础的 git 使用流程记忆为, 工作区与暂存区的交互----> 暂存区与本地仓库的交互 ----> 本地仓库和远程仓库的交互。
(二)git 基本操作命令
由于本人使用 git 时间较短,很多命令没有涉及到,仅供自用参考。其中打了 * 号的为目前初入门最最常用的指令,会随着使用时间的增加而持续的记录更新。
1、配置常用命令:
* 列出当前配置: git config --list
* 列出本地仓库配置: git config --local --list
列出全局配置: git config --global --list;
列出系统配置: git config --system --list;
总结:列出配置相关--- git config --范围 --list
2、工作区常用命令:
* 从远程git仓库复制项目: git clone <url>
* 提交工作区所有文件到暂存区:git add
提交工作区中指定文件到暂存区:git add <file1> <file2> ...
保存工作区文件但在暂存区上删除此文件 : git rm --cached <file>
删除工作区和暂存区删除对应文件的记录:git rm <file1> <file2>
撤销上一次对文件的操作:git checkout --<file>
* 重命名文件,并将已改名文件提交到暂存区:git mv [file-original] [file-renamed]
* 查询当前工作区所有文件的状态:git status (gst)
* 比较工作区中当前文件和暂存区之间的差异,也就是修改之后还没有暂存(gaa)的内容:git diff
* 比较指定文件在工作区和暂存区上的差异 :git diff <file-name>
3、暂存区常用命令:
* 将暂存区中的文件提交到本地仓库中:git commit -m "提交信息" (gcmsg -m '...')
撤销上一次提交(提交完发现注解错误或者少提交了可用,也可再次gcmsg):git commit --amend
* 比较暂存区与上一版本的差异:git diff --cached
查看提交历史:git log
4、仓库常用命令
查看本地仓库关联的远程仓库:git remote
添加远程仓库,一般会取一个简短的别名:git remote add [remote-name] [url]
* 从远程仓库中抓取本地仓库中没有的更新:git fetch [remote-name]
将本地仓库某分支推送到远程仓库上:git push [remote-name] [branch-name]
查看远程仓库的详细信息:git remote show origin
移除远程仓库:git remote rm [remote-name]
(三)git 分支
1、分支的简介
如上图有两个分支:Master和 branch-1 。其中Master是默认就存在的一个分支,通常叫它 主分支。主分支是必须有的分支,其名称也可以通过git远程仓库修改默认配置,但一般不建议修改。这个分支也可以删,但是需要特殊设置下。branch-1 是由我们创建的分支。
从图上,我们可以看到每一个commit的引用,引用最先指向的是1。通过遍历每个分支,我们可以看出最后的通常commit是4。即branch-1 和 master 的合并。
简而言之,在git中分支只是一个指向单个commit的指针,分支开发可以确保每个人有自己的独立分支 ,版本迭代更加清晰 ,使得团队多人协作开发效率更高。
2、分支常用命令
* 创建分支:git branch <branch-name>
* 从当前所处的分支切换到其他分支:git checkout <branch-name>
* 创建分支并切换为当前分支:git checkout -b <branch-name>
* 删除分支:git branch -d <branch-name>
* 显示本地仓库的所有分支:git branch
* 将当前分支与指定分支进行合并:git merge <branch-name>
* 把远程分支合并到当前分支:git merge <remote-name>/<branch-name>
查看各个分支最后一个提交对象的信息:git branch -v
从远程分支checkout出来的本地分支,称之为跟踪分支:(会自动判断应该向远程仓库中的哪个分支推送数据)
在跟踪分支上向远程分支上推送内容:git push
在跟踪分支上合并远程分支:git pull;
(四)反思踩过的坑
1、commit失败不注意看 iterm的报错,而直接push ,导致提交不成功。应及时 git status 查看当前的状态找出未push 成功的原因,并修改。
2、使用fetch只是将远端数据拉到本地仓库,并不自动合并到当前工作分支,只能人工合并。因为在dbase新建迭代会设置分支和远程仓库的自动关联,可以直接使用git pull来拉去远程分支的数据,将远端分支自动合并到本地仓库中的当前分支。
3、团队开发,有新的分支提交到master 的时候,要拉取远方master 进行合并,再重新push。
4、时刻注意当前的分支是哪个
5、永远要先保证自己在 gitlab 上的commit 里面已经更新了,再部署 !!!!!!!!!