Git 入门和常用命令

入门

Git 是最先进的版本控制系统。CVS 和 SVN 都是集中式的版本控制系统,而 Git 是分布式的。

Git 的安装很简单,直接到 官网 下载对应的软件,自行安装即可。

想要熟练运用 Git,必须明白 Git 的主要概念。

主要概念

工作区

指的就是工作目录,即存放代码的项目目录。在项目目录中都会有一个 .git 隐藏文件夹。

版本库

主要指的是 .git 文件夹,它是用来追踪管理版本库(项目目录)的。

版本库里存了很多东西,其中最重要的就是称为 stage(或 index)的暂存区,还有自动创建的主分支 master,以及 HEAD 指针(指向当前分支的当前版本)。

版本库是用来进行本地的版本管理的。在 Git 中,通常所说的版本库是指本地的版本库。

暂存区

暂存区就是 Git 版本库的一个缓存区域。可以理解为缓存区,用于临时保存你的改动。

把文件提交到版本库,是分阶段执行的:

  • 第一步,用 git add 把新增的文件或文件的修改添加到暂存区;
  • 第二步,用 git commit 提交更改,即把暂存区里的所有更改提交到当前的分支。

可以理解为,需要提交的内容通通先放到暂存区,然后一次性将暂存区中的所有修改提交到版本库的当前分支。

将工作区中的修改(包括新创建的文件)提交到版本库,推荐使用下面两条命令分阶段进行。

# 添加至暂存区
git add .

# 提交至版本库
git commit -m "注解"

如果提交到版本库的内容不包含新创建的文件,可以简写为一条命令。

git commit -am "注解"

但不推荐这么写,因为它不会把工作区中新创建的文件(untracked files)提交到版本库,很容易导致漏提交的问题。

分支 & 指针

分支指的就是版本库中的一条时间线,版本库默认就会有一条时间线 master。

每次 git add 和 git commit ,都是在当前的时间线(分支)上操作。默认分支是 master(主分支)。你可以创建多个分支。

无论是本地的版本库,还是远程的仓库,都可以有多个分支。

指针是一个特殊变量,它保存的是内存的地址。可以理解为,指针指向了某一个内存单元。

由于指针指向了内存单元,而内存单元上又可以存储各种数据。所以,指针间接地指向了内存地址上的数据。既然指针也是变量,那么指针也可被其他指针存储,这里的其他指针就是指针的指针。

在 Git 中,用户每进行一次提交操作,当前分支的版本号就会递增,分支的内部指针就会指向新的版本号。分支(时间线)上的每个时间点都对应一个版本号。

HEAD 指针

HEAD 指针就是当前分支的内部指针,它指向的是分支的当前版本(最新版本)。也就是指向了最新的 commit id。

版本回退就是通过更改 HEAD 指针的指向、回退暂存区和回退工作区来实现的。

orgin

Git 默认用 orgin 来代表远程仓库(目标仓库)。

master

无论是本地仓库还是远程仓库,都可能会有多个分支。主分支被称作 master,它是 Git 版本库时间线中的默认分支。用来代表最主要的版本。

团队开发中,远程仓库的 master 分支只能由管理员来进行更新,开发人员可以自定义其他的远程分支(比如 my-dev),开发人员在本地也会有 master 分支,但只允许开发人员将本地的任何分支推送到远程的非 master 分支。

远程仓库

如果只有本地的版本库,Git 照样也能进行版本管理。只不过没办法进行团队协作。

远程仓库就是一个线上的版本库,可以放到公网上,也可以只放到公司的内网(局域网)上。

像 GitHub、gitee(码云)等,都可以作为 Git 的远程仓库;有些公司,更倾向于自己来搭建远程仓库,比如利用 GitLab 开源项目搭建公司内部的远程仓库。

对于公司来说,某个项目的远程仓库,一般会有两个重要的分支,master 分支和 develop 分支。这两个分支只有管理员才有修改的权限。开发人员只能将本地版本库的某个分支推送至远程仓库的非 master、非 develop 分支,然后请求合并到 develop 分支。最后由管理员来处理合并到 develop 分支的合并请求,然后将 develop 合并到 master 分支。

当然,这只是某些公司的远程仓库管理模式。公司不同、项目不同,远程仓库采用的模式也不一定相同。

下面,我们来介绍 Git 中的常用命令。

基本配置

全局配置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

全局配置的配置文件,一般是用户家目录下的 .gitconfig 文件。

读取全局的配置项

git config --global user.name   // 获取当前的用户名
git config --global user.email  //获取当前的邮箱

局部配置

局部配置的配置文件位于项目目录的 .git 目录中。

配置 SSH Key

# 先在本地生成 SSH Key
ssh-keygen -t rsa -C "youremail@example.com"

步骤是先在本地创建 SSH Key,创建的密钥位于用户家目录下的 .ssh 目录(如 C:\Users\HP\.ssh )中。其中,id_rsa 文件是私钥,id_rsa.pub 是公钥。

然后到远程仓库的 Settings 中的 SSH Keys 处,粘贴你的公钥文件 id_rsa.pub 中的内容,保存即可。

说明:仅当你关联的远程仓库的 url 采用的是 ssh(git) 协议时,才需要在远程仓库配置 SSH Keys。

如果你是通过 http 协议来连接远程仓库,则无需配置,因为每次连接远程仓库时,它会提示你输入用户名和密码来进行安全验证。

推荐关联 git(ssh) 协议的远程仓库 url 。 因为它更安全,而且配置了 SSH Key 之后,以后连接远程仓库,就不需要每次都输入用户名和密码。

克隆远程仓库到本地

将远程仓库的 master 分支克隆到本地,然后进行协同开发。

# 克隆远程仓库
git clone 远程仓库的地址

添加至暂存区

修改了本地的代码后,先将修改添加到暂存区。

## 将当前目录中的所有修改添加到暂存区

git add .
或
git add *

将暂存区的内容提交

git commit 命令只会把暂存区中的修改而非文件提交给版本库的当前分支。

# 将暂存区的内容提交至本地的当前分支
git commit -m "注解"

查看版本库的状态

git status

git status 命令非常有用。它可以查看版本库的当前状态,还可以看到相关操作的提示信息。

推送至远程的仓库

语法: git push <远程主机名> <本地分支名>:<远程分支名>

将本地的 master 分支推送至远程的 develop 分支

D:\phpStudy\WWW\private-demo (master)
λ git push origin master:develop

如果远程仓库没有 develop 分支,就会自动创建。

将本地的 master 分支推送至远程的 master 分支

git push origin master

如果省略远程分支名,则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

删除远程分支

git push origin :master
# 等同于
git push origin --delete master

前提是你有权限,当然你也可以直接在远程仓库上操作。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,这条命令是删除远程master分支。

将当前分支推送到远程的同名分支

git push origin

如果当前分支与远程分支之间存在追踪关系(即分支名相同),则本地分支和远程分支都可以省略。

省略主机名推送

git push

如果当前分支只有一个追踪分支,那么主机名也可以省略。

拉取远程的分支

语法: git pull <远程主机> <远程分支>:<本地分支>

git pull 命令拉取远程仓库时,会自动与本地的代码合并。

拉取远程的 develop 分支,到本地的 master 分支

D:\phpStudy\WWW\private-demo 
λ git pull origin develop:master

省略本地分支的名称时,则默认是拉取到本地的当前分支

D:\phpStudy\WWW\private-demo (master)
λ git pull origin develop

省略主机名拉取

git pull

表示拉取远程的同名分支到本地的当前分支。

查看分支

查看远程仓库的分支

λ git branch -r
  origin/HEAD -> origin/master
  origin/develop
  origin/master

查看本地仓库的分支

λ git branch
* master

查看所有的分支

λ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

* 表示这个本地分支是当前的分支。

本地分支管理

创建本地分支

# 创建本地的分支 my-dev
git branch my-dev

# 切换分支
git checkout my-dev

上述两条命令,可以简化为一条:

git checkout -b my-dev

切换分支

# 切换到指定的分支(如果分支在本地不存在,会自动从远程仓库拉取下来)
git checkout develop

更新本地的分支

# 拉取远程的 develop 分支来合并到本地的 develop 分支
# 这样就可以保证本地的分支是最新的
git pull origin develop:develop

# 拉取远程的 master 分支来更新本地的当前分支,master分支会自动合并到当前分支
# 这样,本地的当前分支就会有master分支的最新代码
git pull origin master

合并本地分支

# 将分支 my-dev 合并到当前的分支
git merge my-dev

删除本地分支

# 删除本地的 my-dev 分支
git branch -d my-dev

# 删除本地的 my-dev 分支(未合并的)
git branch -D my-dev

远程分支管理

远程分支除了可以直接在远程仓库上进行管理之外,还可以从本地进行管理。

比如,常见的推送命令:

git push origin dev_tmp:dev_tmp

# 简写形式
git push origin dev_tmp

将本地的 dev_tmp 分支,推送至远程的 dev_tmp 分支。如果远程仓库没有 dev_tmp 分支,会自动创建。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值