Git 系列 1:提交修改到远程仓库——详尽版

Git 是什么?

Git 是目前世界上最先进的分布式版本控制系统(没有之一)。

Git 有什么特点?简单来说就是:高端大气上档次!

那什么是版本控制系统?

版本控制,就是能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以。

作为目前世界上最先进的分布式版本控制系统,提交文件修改到远程仓库是最常见的Git 操作了。今天,我们来学习一下这一整个流程。

一、对项目进行修改

在这里,我们简单模拟下项目的修改:添加一个名为A.txt 的文件。

image
image.gif

二、查看当前项目状况

查看当前项目状况的命令是 git status

git status

image.gif

这是Git中最为常用的命令之一,通过它可以查看当前工作区和暂存区文件的状态。

运行结果如下:

image

可以看到,工作区有一个文件 A.txt 处于未跟踪状态( untrcked )。

2.1 暂存区与工作区

2.1.1 工作区

工作区就是在电脑里能看到的目录,例如我的gitTest 文件夹就是一个工作区。

image
image.gif

2.1.2 暂存区

在工作区中有一个隐藏目录 .git ,这是是Git 的版本库,不是工作区。Git 的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index )的暂存区。

在我们把文件推送到git 仓库的时候,就是:

  1. 通过 git add 命令将需要提交的文件修改放到暂存区

  2. 通过 git commit 命令一次性将暂存区的修改提交到当前分支。

    image
    image.gif

2.2 文件状态

2.2.1 未跟踪状态( untracked )

未跟踪状态的文件,是在工作区,但是未纳入Git 管理的文件,不参与版本控制。

使用git add 命令即可将未跟踪文件纳入管理。

2.2.2 位于暂存区待提交状态(Staged )

使用git add 命令即可将未跟踪文件纳入管理,即提交到暂存区,这时文件就处于可以提交的状态。

image
image.gif

上图是将A.txt 添加到暂存区后的运行结果。因为第一次被提交到暂存区,它前面被标注new file。

2.2.3 Modified 状态

纳入跟踪的文件在工作区中被修改后就会处于Modified 状态。

image
image.gif

上图是将A.txt 添加到暂存区后,再进行修改后的运行结果。

三、添加文件到暂存区

3.1 全部添加

通过执行 git add . 命令将工作区内的文件修改全部添加到暂存区。

git add .

image.gif

还有一种说法是

通过git add all 命令将工作区内的文件修改全部添加到暂存区,但是经过本人尝试,该命令会将all 当成文件或目录来处理,因此会报错:未找到匹配的文件。

image
image.gif

3.2 指定文件

通过执行 git add file 命令可指定文件添加到暂存区。

git add A.txt

image.gif

如果想指定多个文件被添加到暂存区,只需在各个文件名之间空一格即可。

git add A.txt B.txt C.txt

image.gif

3.3 指定目录

通过执行 git add dir 命令可指定哪些目录被添加到暂存区

git add AA

image.gif

本人新建了AA 和BB 两个目录,AA目录下有AA.txt 和AAAA.txt 文件,BB目录下有BB.txt 文件。通过上述命令可只添加AA 目录下的所有文件,而不将BB 目录下的文件添加到暂存区。

提交到仓库后,查看项目状态:

image
image.gif

可以看到,BB 目录仍是处于未跟踪状态。

如果想指定目录下的文件,可以将文件名改为文件路径。

git add BB/BB.txt

image.gif

四、查看哪些文件将被提交

如果不会有多余、或错误的文件被提交,那么这一步可以省略。

我们可以使用 git status 命令来查看项目的状态,也可以使用另一条命令:

git diff --cached

image.gif

来查看哪些文件将被添加到暂存区,即将被提交到当前分支。

image
image.gif

在我对A.txt 进行修改且新增一个C.txt 文件后的运行结果:

image
image.gif

而此时git status 的运行结果:

image
image.gif

五、提交到本地版本库

5.1 直接提交

这是比较常用的方法,就是通过 git commit -m "message" 命令进行提交。

git commit -m "message"

image.gif

message 指代你的提交信息。

如果你想要对提交信息进行详细设计的话,可以不加参数:

git commit

image.gif

该命令的运行结果:

image
image.gif

这个界面与vim 很是相似,但是在该节目的操作具体是:

  • 按下字母键 c,进入编辑状态

  • 按下Esc,退出编辑状态

  • 连按两次大写字母Z,保存退出

5.2 追加提交

如果对最后一次提交信息不满意,可以利用git commit --amend 命令对其进行修改。

git commit --amend -m "add new file"

image.gif

实际应用中,当完成一次提交之后,可能会发现此次提交有些文件需要修改,当然我们可以在下一次提交中修改此文件,但这无疑会让提交历史比较累赘。我们可以利用git commit --amend 命令追加新的文件修改。

git add .
git commit --amend --no-edit

image.gif

这样就可以在最后一次提交中追加新的文件修改,并且不修改原本的提交信息。

六、拉取远程仓库最新代码

git pull 命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。

拉取master 分支上的最新代码:

git pull

image.gif

拉取指定分支上的最新代码( 例如本人的当前分支是A )

git pull origin A

image.gif

运行结果:

image
image.gif

七、推送到远程仓库

如果第六步拉取的代码与本地的代码没有发生冲突,那么就可以直接推送到远程仓库的对应分支。

如果产生冲突,解决冲突后,重新执行 git add 与git commit 命令即可到达本步骤。

使用命令git push 将文件修改推送到远程分支A :

git push origin A

image.gif

运行结果:

image
image.gif

八、查看提交记录

8.1 可视化界面

使用命令 gitk 可以打开可视化界面进行查看

gitk

image.gif

运行结果:

image
image.gif

8.2 日志查看

使用命令 git log 可以查看所有的 commit 记录

git log

image.gif

运行结果:

image
image.gif

注:提交记录过多,按Enter 键进行拉取,按 q 键退出查看。

添加参数--stat 可查看每次提交的简略统计信息。

git log --stat

image.gif

运行结果:

image
image.gif

九、分支合并

git merge 命令用于合并指定分支到当前分支。

9.1 切换分支

因此,合并分支的第一步是:切换分支到你想要的分支。

git checkout master

image.gif

9.2 查看当前分支

使用git branch 命令可以查看项目的所有分支。

git branch

image.gif

运行结果:

image
image.gif

其中,有 * 标志在前面的就是当前分支。

9.3 合并分支

使用命令git merge 命令可以将指定分支合并到当前分支。

git merge A

image.gif

运行结果:

image
image.gif

注意上图中的 Fast-forward 字样,这表明:本次合并是快速向前合并。

那什么是快速向前合并?

通常,一个合并会产生一个合并提交(commit ), 把两个父分支里的每一行内容都合并进来。

但是,如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit )都已经存在另一个分支里了,git 就会执行一个“快速向前" (fast forward )操作;git 不创建任何新的提交(commit ),只是将当前分支指向合并进来的分支。

我们可以添加--no-ff 参数禁用Fast forward 模式。

git merge --no-ff A

image.gif

9.4 推送内容

使用 git psuh 将分支A 的内容同步到master 分支上。

git push origin master

image.gif

运行结果:

image
image.gif

十、总结

提交文件修改到远程仓库的最简步骤:

git add.
git commit -m "message"
git pull
git push origin A

image.gif

最后,分享给大家一份国外网友制作的Git Cheat Sheet ,在公众号后台回复:gitSheet 即可免费领取。

至此,本文结束。我是陈冰安,一个Java学习者。欢迎关注我的公众号【暗星涌动】,愿与你们一同进步。

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