Git 基础
Git 基础
一、简介
什么是 Git?
Git 是一个开源的分布式版本控制系统。最开始,Linus Torvalds 为了帮助管理 Linux 内核开发而开发。Git 的作用?
版本控制:管理不同版本的文件,可以记录每次文件的改动。分布式控制系统的优点:
- 不需要中央服务器,安全性高。
- 不需要联网,每个人本地都有一个库。
二、Git 安装
Git 下载地址,下载对应系统的安装包,一直 next 即可。
安装完成后,在开始菜单找到 Git -> Git Bash(或直接在桌面或文件夹中右键),这就是 Git 的命令窗口,可以进行 Git 操作。
三、Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
环境变量存放的位置:
- 系统中所有用户都适用:/etc/gitconfig,使用 git config –system 读写的是这个文件。
位于安装目录 - 适用于当前用户:~/.gitconfig,使用 git config –global 读写的是这个文件。
$HOME 变量指定的目录,一般是 C 盘 User 目录下 - 适用于当前项目:.git/config
上边三个配置,下层会覆盖上层的相同配置,即 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
用户信息
配置个人的用户名和电子邮件地址:
1 | $ git config --global user.name "你的用户名" |
以上使用了 –global 选项,更改的配置文件就是位于用户主目录下的那个,以后所有项目都会默认使用这里配置的信息。如果在某个特定项目中使用其它 username 和 email,去掉 –global,在项目中重新配置即可。
查看配置信息
1 | $ git config --list |
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
四、Git 概念
- 工作区
电脑里能看到的目录。 - 暂存区(索引)
位于版本库中,一般放在 .git/index 中。 - 版本库
工作区中的隐藏目录 .git ,就是 Git 的版本库。 - 分支
分支是版本控制系统中的重要特性。
一个项目有多个分支,主线就是主分支,支线就是其它分支。其他分支最终合并到主分支上。
主分支一般是 master - HEAD
我们可以把 HEAD 理解成 “指针”,指向当前分支
五、Git 基本操作
初始化仓库(init)
使用 git init
命令初始化仓库:
1 | $ git init # 使用当前文件夹作为 git 仓库 |
执行完后会生成一个 .git 目录。
克隆仓库(clone)
使用 git clone
拷贝一份远程仓库,也就是下载一个项目。
1 | $ git clone <repo> # 拷贝到当前文件夹 |
暂存(add)
使用 git add
命令,将工作区中的文件提交到暂存区:
1 | $ git add <file> # 添加单文件 |
提交(commit)
使用 git commit
命令,将暂存区提交到本地仓库:
1 | $ git commit -a # 修改文件后不需要执行 git add 命令,直接来提交 |
撤销
重新提交:覆盖之前的提交
1 | $ git commit --amend |
取消暂存的文件:
1 | $ git reset HEAD <file> |
撤销对文件修改:危险操作!!!会用最近提交的版本覆盖本地所有修改
1 | $ git checkout -- <file> |
推送(push)
使用 git push
命令,将本地分支版本推送到远程仓库合并:
1 | $ git push <远程主机名> <本地分支名>:<远程分支名> |
拉取(fetch)
git fetch
命令用于从远程获取代码库。
该命令执行完后需要执行 git merge
合并远程分支到你所在的分支。
拉取合并(pull)
git pull
命令用于从远程获取代码并合并本地的版本。
git pull
就是 git fetch
和 git merge FETCH_HEAD
的缩写。
1 | $ git pull <远程主机名> <远程分支名>:<本地分支名> |
查看仓库状态(status)
git status
命令可以查看在你上次提交之后是否有对文件进行再次修改。
1 | $ git status |
查看历史提交记录(log)
1 | $ git log [选项] [分支名/提交哈希] |
六、远程仓库 GitHub
详情参考:菜鸟文档
简介部分介绍过,Git 没有中央服务器。如果想要分享代码或与他人合作开发,需要将数据放到一台服务器上,也就是所谓的远程仓库中。
这里我们以 GitHub 为例。
添加远程仓库(remote add)
1 | $ git remote add <remote_name> <remote_url> |
这里 remote_name 一般为 origin,remote_url 为 GitHub 仓库中的 URL
连接 GitHub
本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:
1 | $ ssh-keygen -t rsa -C "Github 上注册的邮箱" |
之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key,然后在 GitHub Settings 中 Add SSH key。
验证连接:
1 | $ ssh -T git@github.com |
之后输入 yes
GitHub 新建仓库
这里就不多说了,不会的朋友可以参考文档或教程
查看当前的远程库
1 | $ git remote # 列出当前仓库中已配置的远程仓库。 |
推送到远程仓库
add、commit 执行之后,使用 push 推送到远程仓库
1 | $ git push <远程主机名> <本地分支名>:<远程分支名> |
删除远程仓库(remote remove)
1 | $ git remote remove <remote_name> # 从当前仓库中删除指定的远程仓库。 |
代码冲突:远程与本地不同,本地怎样推送
远程库和本地库内容不同,导致本地推送失败。
解决办法:我们需要先 pull(fetch + merge)从远程库中拉取,然后根据自己的需要,add -> commit -> push。
这里只用了 master 主分支,之后的 “Git 进阶” 笔记中会提到分支操作等进阶内容