Git的前因后果

《Git的前因后果》因何而来?

2018年3月份之前,番茄开发一直使用的是svn作为版本管理工具,对git知之甚少。4月份步入新的工作环境,也随着潮流接触到了Git以及GitHub、GitLab、码云这类远端管理工具。虽然git和svn完全是两种模式,但是我更倾向于git,为什么?不怕笑话,我是2017年下半年才接触到了分布式开发,Spring Boot和Spring Boot两大框架,而git也是一种分布式理念的产物,自然而然就摒弃掉了svn。而且在我看来,git以及类似GitHub这类远端代码管理工具,给我带来的最大受益之处就是保证了代码不易丢失并省去了代码存储工具(如svn的中央服务器)。因此自然而然投入了Git的怀抱中。

Git 工作流程:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
Git 工作流程图

Git 工作区、暂存区和版本库:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git 工作区、暂存区和版本库关系图

备注:图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

Git 命令(基础):

$ git config --global user.name 'username' //Git为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址
$ git config --global user.email 'email'
$ git init                                 //使用当前目录作为Git仓库。
$ git init <newrepo>                       //当前目录下新建newrepo文件夹作为Git仓库。
$ git add <file>                           //当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
$ git commit -m '<remark>'                 //暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
$ git clone <repo>                         //从现有Git仓库中拷贝项目。
$ git clone <repo> <directory>             //从现有Git仓库中拷贝项目到指定的目录。
$ git status                               //文件状态查询。
$ git status -s
$ git remote add origin <repo>             //新增远端仓库路径。
$ git push -u origin master                //将本地更新推送到远端仓库的主分支上。

git status -s 状态码解析:

状态码 含义
A 你本地新增的文件(服务器上没有)
C 文件的一个新拷贝
D 你本地删除的文件(服务器上还在)
M 文件的内容或者mode被修改了
R 文件名被修改了
T 文件的类型被修改了
U 文件没有被合并(你需要完成合并才能进行提交)
X 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
? 未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理

Git 命令(高级):

$ git diff          //尚未缓存的改动。
$ git diff --cached //查看已缓存的改动。
$ git diff HEAD     //查看已缓存的改动与未缓存的所有改动。
$ git diff --stat   //显示摘要而非整个。
$ git reset HEAD    //取消已缓存的内容。

//如果只是简单地从工作目录中手动删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
$ git rm <file>                //从Git中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。
$ git rm -f <file>             //如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
$ git rm --cached <file>       //如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可。
$ git mv <filename> <filename> //用于移动或重命名一个文件、目录、软连接。

Git 命令(查看提交历史):

$ git log                                              //列出历史提交记录。
$ git log --oneline                                    //查看历史记录的简洁的版本。
$ git log --oneline --graph                            //查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项。
$ git log --reverse --oneline                          //逆向显示所有日志。
$ git log --author=<name>                              //只查找指定用户的提交日志。

//指定日期,可以执行几个选项:--since 和 --before,以及--until 和 --after。
$ git log --oneline --before={} --after={} --no-merges //查看Git项目中三周前且在四月十八日之后的所有提交(--no-merges 选项以隐藏合并提交)。

Git 分支管理(必杀技)

$ git branch                   //列出全部分支。
$ git branch <branchname>      //创建分支。
$ git checkout <branchname>    //切换分支。
$ git checkout -b <branchname> //创建新分支并立即切换到该分支下,从而在该分支中操作。
$ git branch -d <branchname>   //删除分支。

//合并分支,首先切换到要合并的分支(如,我要将branchtest合并到master上,那么就要先切到master分支上)。
$ git merge <branchname>       //合并branchname分支到当前分支。

合并冲突:这是很多第一次接触git的小白最害怕发生的状况,其实大可不必,三步解决。
1.git merge <branchname>之后提示冲突,在提示内容中会明确告诉你冲突的位置。
2.手动解决冲突。
3.将修改的文件,git add,git commit即完成冲突的解决,不需要再次执行git merge <branchname>命令。


参考:RUNOOB.COM Git教程git status -s 状态码解析

愚见:实战一次git的常用命令,亲手解决一次冲突,你便不再觉得git是你的“BUG”了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 1、别人的婚礼上居然把自己感动哭了。 2、姐姐来看我,还给我买了冰淇淋。 3、小琴阿姨、爸爸妈妈的勤劳让我很动容。...
    Scccarlett阅读 258评论 0 0
  • 因为有爱,每句话好好说;做情绪的主人——今天没有做到。晚上跟先生打电话说明天顺路接姐姐的事,电话里先生的口...
    芳菲_0128阅读 130评论 0 0
  • 星期五中午 天儿有点热 微信群里有人问:食堂今天有炖牛肉么? 吃牛肉,长力气! 因为我们下午 要拔河 百度上面说:...
    高小花0218阅读 361评论 0 1