git 基础用法梳理

推荐你们读一下大佬的《Git 原理详解及实用指南》,简单易懂,成功让我舍弃了图形化工具,转入命令行操做。

在咱们平常的项目开发中,版本管理不可避免,通常经常使用的版本控制系统有两个 svn 和 git ,至于他们的区别,有兴趣的同窗请自行研究。本文主要经过几个 git 命令的使用,结合项目开发的实际过程,来聊一聊 git 的基本使用方法。

1、初始化本地项目

当咱们新接手一个项目时,首先要作的就是要从远端仓库拉取项目代码。html

git clone ***** (* 为远程仓库地址)
复制代码

以上是已有远程仓库时的作法,但是若是是一个全新的项目,尚未远程代码仓库,那么咱们就须要先新建一个远程仓库,而后经过 git clone 命令来拉取项目代码。
你也能够先在本地初始化项目,而后关联到远程仓库:git

git init   # 初始化本地的仓库,会生成.git文件
git add .  # 把全部改动添加到暂存区
git commit -m "first commit" # 编写 commit 信息
git remote add origin https://github.com/wumouren/git-demo.git # 关联本地仓库到远程
git push -u origin master # 推送本地更新到远程仓库,并设置默认推送路径
复制代码

如图:github

一、初始化本地仓库bash

二、建立远程仓库,获取远程仓库地址yii

三、新增本地文件,添加到暂存区,并编写 commit 信息,提交本地更新svn

四、关联本地仓库到远程仓库,并设置默认推送路径,推送本地更新到远端工具

通过上述步骤,咱们再次打开远程仓库,发现本地更新已经成功推送到了远程仓库:ui

咱们用寄快递来类比下 git 提交的过程:spa

git add . # 添加修改到暂存区 --> 相似与咱们把须要寄出的快递挑拣出来

git commit -m '描述' # 编写 commit 信息 --> 至关于咱们把快递打包,并填写快递单

git push # 推送本地更新到远程仓库 --> 至关于咱们寄出快递

复制代码

以上,咱们简单的过了一遍 git 的使用流程,关于所用到的一些命令,在下边咱们再来继续探讨。命令行

2、添加文件改动到暂存区

当咱们在本地进行需求开发时, git 总能追踪的代码的改变,咱们能够经过 git status 来查看:

当咱们修改 a.js 的内容,并新增 b.js 后,经过 git status 咱们看到,控制台已经清晰的告诉咱们,如今本地仓库有了哪些改变 。 咱们能够经过 git add 来添加修改到暂存区。以后,咱们再用 git status 来看下文件状态:

咱们看到,经过 git add 把修改内容添加到暂存区后,全部的修改都变成了绿色,控制台提示信息也发生了改变。

关于 git add 的参数:这里有更多用法

git add <path>(可写多个) # 提交指定文件改动到暂存区

git add . # 提交全部被删除、被替换、被修改和新增的文件改动到数据暂存区等同于 git add -A
# 另:一些博文中说 git add . 只提交全部修改的和新建的文件改动到暂存区--即删除的文件不会被添加,可我实验屡次,发现并非这样,猜想和 git 版本有关,个人版本 2.15.2

git add -u <===> git add –update  # 提交全部被删除和修改的文件改动到数据暂存区(即新增的文件不会被添加)

git add -A <===>  git add –all   # 提交全部被删除、被替换、被修改和新增的文件改动到数据暂存区(综合了 git add . 和 git add -u)
复制代码

当咱们修改了多个文件后,想提交代码,可里边恰恰又有一个文件改动咱们不想提交,这时咱们须要用到另外一个命令:

git reset 文件路径(可写多个)
复制代码

如图:

上图中,咱们新增了三个文件改动,而后经过 git add 把文件改动提交到暂存区,但是咱们忽然又以为有些文件改动咱们还不想提交,全部又经过git reset 命令撤销了相关提交。
以上操做仅作相关命令的演示,在实际的开发中,还望你们灵活使用。

关于 commit

咱们把改动添加到暂存区后,下一步就是要 commit(相似与挑拣完须要快递的东西后,要进行打包填写快递单)。 咱们能够每一次 commit 后都进行 push 操做,也能够屡次 commit 后,再进行 push 操做。咱们能够 git log 来查看 commit 记录:

如图,咱们经过三次 commit 分别提交了 a.js 、 b.js 、 c.js。 而后经过 git log查看,能够清晰的看到咱们三次 commit 分别的 commit 描述信息。(能够经过连续两个大写的 Z 来退出 git log
若是咱们忽然想修改最后一次 commit 的描述信息,那么咱们将会用到一个新的命令参数 git commit --amend

当咱们输入git commit --amend 后,点击会车,咱们会进入一个编辑页面。

在这个页面中咱们能够修改 commit 描述信息,而后保存、退出。

具体操做为:
点击 i 建,进入插入模式,开始编辑信息。
完成后 按 esc 键,退出编辑模式。
而后输入英文 :wq! 保存退出

# 不熟悉命令行操做的同窗,请自行研究
复制代码

修改完 commit 信息后,咱们再次经过git log命令来查看 commit 记录:

假定咱们想修改的描述信息不是最后一次 commit 的 d.js ,而是 b.js ,那么,咱们将会用到另外一个命令 git rabase -i

咱们将 b.js 前的 pick 标识修改成 edit:

回车后咱们发现分支已经不在 master 上了:

咱们再次输入 git log 命令,能够看到,最近一次的 commit 已经变成了 b.js :

咱们重复修改 d.js 的操做,以后根据命令行提示的信息,咱们输入git rebase --continue命令:

咱们再次打印 commit 记录,能够看到,b.js 成功被修改:

# 以上只是其中一种方法,其余方法请自行研究。
复制代码

pull、push 与 冲突

git pull 用于从远端仓库获取最新代码。
依旧用寄快递来类比,当咱们将快递打包好并填好快递单后,在往寄存柜中存放以前,先要知道那些格子是被放过东西的,那些是尚未放东西的,咱们的快递只能放在尚未放东西的格子中!

git pull 命令就能够看做是更新了最新的储物格信息。

假定,你想把快递放在第一排第一列,若是这个储物格是空的,天然能够放进去。但是,若是这个储物格已经放过了东西,你还想往里放,这样,就产生了冲突。git 中的冲突,大体也是这么个意思。

假定咱们的同事小A,在和你协做开发,他也修改了 a.js 文件,而后提交了代码,这样在你进行 git push时,便会产生冲突。

# 左侧是咱们正在编辑的 a.js ,右侧是 小A 的修改的 a.js
复制代码

咱们看到,两人在开发的时候都修改了相同位置的代码,而后小A开发完后,进行了提交:

而后咱们再来提交本身的代码:

很明显,在代码中产生了冲突。这时,咱们就要和小A来交流,来解决冲突。

和小A交流后,咱们决定保留双方的代码,本身就删除了代码中那些奇奇怪怪的 hash ,从新进行了一次提交:

这样,一次简单的冲突就解决了。

当咱们 push 完成后,远程仓库的代码已经再次发生了改变,小A忽然想起来还有一个需求要修改,但是在修改前却忘记了更新本地代码,因而在完成修改以后,发现直接 push 时报了错:

控制台提示咱们在 push 以前要先 pull ,咱们按照提示输入 pull 命令:

控制台中又出现了那个咱们熟悉的 commit 信息编辑界面:

咱们保存退出后,从新 push ,就能够了。

注意的地方

以上,简单说了两个常见的冲突,固然在实际开发中,还会出现各类奇奇怪怪的问题。
在有问题时,咱们不要慌(以前我会很慌,不知道该怎么办,瞬间手忙脚乱)应该多留意控制台信息,而后查找解决办法。
在提交代码前必定要先 pull ,把本地代码更新到最新,而后再 push , 这样作能够避免覆盖别人的代码。
复制代码

分支与合并分支

在项目的开发中,经常会须要有多个分支。咱们能够经过git branch命令来新建分支:

git branch        # 查看分支

git branch 分支名   # 新建分支

git checkout 分支名 # 切换分支
复制代码

如图:

咱们在 2018 分支上再作些修改,并提交代码:

经过 git log 咱们看到,新提交的 2018 已经存在提交记录里了:

咱们再切换到 master 分支,发现,信息为 2018 的提交记录并不存在,相应的改动固然也不存在:

这时咱们就须要合并分支,把 2018 分支上的改动合并到 master 分支上,咱们须要用到一个新的命令:git merge

咱们切换到 master 分支上,而后输入git merge,如图:

咱们看到,在 2018 分支上的改动,已经出如今 master 分支上了。

最后

本文旨在梳理 git 使用的基本知识,对于一些命令的使用和描述并不全面,更多高级的用法,还望各位自行研究,这里不作赘述。 以上,若有描述不正确的地方,还望批评指正!

相关文章
相关标签/搜索