git基础

git 基础

在文章的开始,首先说一下这篇文档的定位。这就是一篇入门的git文档,如果你已经可以在工作学习中熟练地使用git,那现在果断叉掉吧,后面没有你感兴趣的内容。还有,这篇肯定没有git官方文章讲得好,但是写这个的意义在于使用较短的篇幅来介绍一个完整的基础操作,使阅读的人可以有一个大概的了解,甚至于完成日常的基础操作。如果你期待更严谨完整的内容请直接移步git官方文档,我自己也是在这里阅读学习的。

当然如果你期待更短更快,达到一个快速预览的目的,可以查看git 简明指南进行了解。

推荐使用git命令行

文章中的所有操作全部在控制台使用git命令完成,个人不推荐使用第三方的UI程序:第一是因为这样不利于理解git的基本操作逻辑和思想;第二就是实际工作中很多场景下都是需要在服务器或者控制台里来完成部署打包的操作,学习使用命令行来完成git的所有操作更具有普适性。

本篇文章会按照线性的顺序来对git从以下几个角度进行介绍:

  1. 安装
  2. 建立仓库
  3. git工作流
  4. 添加和提交
  5. 推送到远程
  6. 分支
  7. 更新和合并
  8. log

git安装

git的安装请移步git官网,下载安装自己系统对应的版本即可。本文实践是基于 2.15(win平台)版本。安装完成后在控制输入git --version后可成功输出git版本说明安装成功。

建立仓库

本地初始化一个git仓库很简单,新建文件夹,打开文件夹执行git init即可。

# 在当前文件夹init一个git仓库
git init
# 指定文件夹创建一个git仓库
git init [project-name]

实际情况更多的是克隆别的仓库来建立

# 克隆一个仓库
git clone [url]
# 指定分支和git文件名称来进行克隆
git clone -b [分支名称] [url] [文件夹名称]

git工作流

本地的git仓库由三部分组成:工作目录暂存区HEAD

  • 工作目录是指当前git目录下实际持有的文件
  • 暂存区(Index) 保存着你的改动,就像一个缓存区
  • HEAD 像一个指针,指向最后一个提交的结果。

实际的情况是你克隆了一个git项目(假设是j2ee项目),现在你对A.java, B.java两个文件做了改动,同时还新增了一个文件C.java,可是此时你的开发还没有完成,但是改动又蛮大的,如果不及时保存可能会有丢失的风险,这个时候可以使用add 命令来将两个文件的改动和一个新增的文件保存在暂存区,来让git做一个临时性存储。这三者之间的关系具体如图:。

添加和提交

讲到添加和提交就必须明白git中文件的三种转台已经之间的关系。三种状态分别为:已提交(committed)、已修改(modified)和已暂存(staged)。一个已经被提交的文件的状态就是已提交,已提交的文件被修改后就是已修改,修改后的文件被存储到暂存区就是已暂存。这三个状态对应的关系详细如图:

Untracked(未跟踪) 的状态就是文件在git目录下,但是未被git记录的状态。

用add命令添加修改或者新增的文件到暂存区

# 添加单个或者多个文件
git add [file1] [file2] ...

# 添加目录,目录下的所有文件或者子目录都会被添加
git add [path]

# p参数可以让每一处改动在添加之前进行确认,一个文件内的多处改动会询问多次
git add -p

# 添加所有改动
git add .

当然,add的文件名或者目录参数是支持通配的,比如你想添加src路径下所有以mapper.xml结尾的文件,就可以这样写:

# 添加src目录下的所有以mapper.xml结尾的文件到暂存区
git add src/*mapper.xml

改动被add后到了暂存区后,就可以用commit命令提交暂存区的变动到本地,形成一个提交

# 提交暂存的改动到本地仓库
git commit -m "[message]"

# 直接提交,会跳转到默认的文本编辑器中编辑详细的message
git commit

# 如果某一次的改动比较小,可以直接添加-a参数,add和commit同时进行
git commit -a -m "[message]" 

直接运行git commit 会跳转到git默认的文本编辑器中,Windows版本的git bash,默认集成的是vim编辑器,详细如下图。

i进入编辑模式对提交的message进行编辑,然后按Esc,输入:wq 回车即可。vim的基础操作命令这里就不详细展开讲,详细可以Google。

推送到远程

一般作为开发人员,我们都会有一个远程的主仓库作为代码管理的核心点,比如gitlab,github等等。刚刚上述我们提交的变动都是提交在本地的克隆仓库中,还未同步到推送的远程。

# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force

# 推送所有分支到远程仓库
$ git push [remote] --all

push之后,本地的提交记录就会被同步到远程。如果项目是本地init出来的,在推送到远程之前需要先连接到远程Server,之后才能推送。

git remote add origin <server>

分支

git的分支作为git的最具核心的设计,对于理解git有着十分重要的作用。但是,这里我们只做简单的介绍,理解基本概念即可。

刚刚推送本地的代码到远程的时候,出现了[branch],就是分支的意思。比如命令git push origin master的意思是推送代码到别名为origin的远程master分支下。、

我们使用了commit命令将一次改动提交到了git仓库,我们可以将这些提交视为一个点,当提交的次数多了,这些点就可以串成一条线,这条线就可以称之为分支。一般来说,一个git项目为为了管理方便,会出现多条线。比如常见的master主分支,develop开发分支,hotfix bug热修分支等等。每一个分支的意义都是人为给予的,对于git本身来言这些分支都没有本质上的区别。

# 查看当前分支
git branch

# 查看所有分支信息
git branch -a

# 创建一条分支
git branch [branch-name]

# 切换到指定名称扥之
git checkout [branch-name]

# 创建一条分支,并切换到新建的分支 git checkout -b [branch-name] # 删除本地分支 git branch -d [beach-name] # 删除本地分支并同步到远程(也可以说,删除指定的远程分支) git push origin --delete [branch-name] git branch -dr [remote/branch] 

从上述命令已经看出来了,除非显式的操作远程分支,否则大多数情况下都是默认操作的本地分支,所以分支这个概念是区分本地和远程的。大多数时候,我们默认的本地和远程分支都是一一对应的关系,名称且一样。

# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]

# 建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream [branch] [remote-branch]

以上都是个人的学习记录和见解,如果你觉得对你有帮助的话,请多支持,鼓励我继续为人民服务。

猜你喜欢

转载自www.cnblogs.com/Vultr/p/8977508.html
今日推荐