Git
学苍穹外卖时遇到Git,于是先了解学习一下Git

文章目录
一.概述
Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(如Java类、xml文件、html页面等)
Git能做什么?
- 代码回溯
- 版本切换
- 多人协作
- 远程备份
简介
Git用来对软件开发过程中的源代码文件进行管理,通过Git仓库来存储和管理这些文件,Git仓库分为两种:
-
本地仓库:开发人员自己电脑上的Git仓库
-
远程仓库:远程服务器上的Git仓库,比如:
- GitHub(国际主流,开源首选)
- Gitee(码云)(国内常用,访问快,适合中文用户)
- GitLab (企业自建常用)

-
commit:提交,将本地文件和版本信息保存到本地仓库
-
push:推送,将本地仓库文件和版本信息上传到远程仓库
-
pull:拉取,将远程仓库文件和版本信息下载到本地仓库
Git和SVN的区别
| 项目 | SVN | Git |
|---|---|---|
| 类型 | 集中式 | 分布式 |
| 是否需要联网 | 提交必须联网 | 本地提交,联网时再推送 |
| 完整历史 | 只在服务器 | 每个人本地都有 |
| 分支操作 | 较重、较慢 | 轻量、快速 |
| 安全性 | 服务器挂了就危险 | 多个备份,更安全 |
- 用SVN:就像只能在公司内网提交代码,回家没网就干不了活。
- 用 Git:在家、在地铁、在飞机上都能提交代码,等有网了再同步到 GitHub。
二.下载与安装
下载
可以到官网上(但是比较慢):Git - Install for Windows
也可以从清华的镜像源里下载(几秒钟就好了):Index of /github-release/git-for-windows/git/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
安装
下载好后双击exe开始安装,一直点击next就可以快速安装
安装完成后在任意目录下点击鼠标右键,如果能看到
Git这两项就表示安装成功
- Git GUI Here:打开Git图形界面
- Git Bash Here:打开Git命令行
三.Git常用命令
1.全局配置
当安装Git后首先要做的就是设置用户名称和email地址,Git每次提交时都会使用该用户信息
在Git命令行中执行:
-
设置用户信息(随便设置,不是github或者gitee的信息)
bashgit config --global user.name "ran_111" git config --global user.email "xxx@xxx.com" -
查看配置信息
bashgit config --list
一台电脑只能有一个Git用户吗?
一台电脑完全可以配置多个 Git 用户,比如:
-
你用 个人账号 做开源项目(GitHub)
-
同时用 公司账号 提交工作代码(GitLab / Gitee 企业版)
在公司项目仓库里单独设置公司信息
bash# 进入公司项目目录 cd ~/work/company-project # 单独设置(不加 --global) git config user.name "Ran Zhang" git config user.email "ran.zhang@company.com"效果:
- 所有仓库默认用
ran_111 - 只有
company-project用公司身份提交
- 所有仓库默认用
2.常用命令
2.1获取本地仓库
2.1.1创建一个本地仓库
- 在任意目录下创建一个空目录作为本地Git仓库
- 在这个目录中,右键打开Git Bash窗口
- 执行
git init - 若当前目录中看到.git文件夹(此为隐藏文件夹需要设置一下才能看见)就表名Git仓库创建成功
注:一个文件下只能有一个本地仓库
2.1.2从远程仓库克隆到本地
- 在你需要的目录中,右键打开Git Bash窗口
- 执行
git clone https://xxxxxxx [远程仓库地址]
2.2基本概念

版本库:.git隐藏文件就是版本库,其中存储了很多配置信息、日志信息和文件版本信息等
工作区:包含.git文件夹的目录,主要用于存放开发的代码
暂存区:.git文件夹中有很多文件,其中index文件就是暂存区。暂存区用于临时保存修改文件
暂存区的重要性:
暂存区相当于一个中转站
git每次commit都是把暂存区的全部提交
工作区的文件状态:
- untracked 未跟踪(未被纳入版本控制)
- tracked 已跟踪(被纳入版本控制,即commit到版本库内)
- Unmodified 未修改状态
- Modified 已修改状态
- Staged 已暂存状态
eg 修改已提交的文件,只是改变了工作区的副本;要保存新版本,必须通过 add + commit 创建一个新的快照,而历史 commit 永远保持不变
2.3本地仓库操作
常用命令:
| 命令 | 说明 |
|---|---|
| git status | 查看文件状态 |
| git add | 将文件的修改加入暂存区 |
| git reset | 将暂存区的文件取消暂存或切换到指定版本 |
| git commit | 将暂存区的文件修改提交的版本库 |
| git log | 查看日志,必须在工作区目录下执行该代码才能查询.git文件夹中的日志 |
- 日常删除文件 → 用
git rm 文件名+commit(文件从当前版本消失,历史保留)
2.4远程仓库操作
| 命令 | 说明 |
|---|---|
| git remote | 查看远程仓库 |
| git remote add | 添加远程仓库 |
| git clone | 从远程仓库克隆 |
| git pull | 从远程仓库拉取 |
| git push | 推送到远程仓库 |
用 git clone 从 GitHub 克隆下来的仓库,会自动关联远程仓库(remote),不需要手动 git remote add
2.5分支操作
Git 分支让你能并行开发多个功能/修复,彼此隔离、互不干扰,最后安全地合并回主干
- 通过
git init命令创建本地从库时会默认创建一个master分支 - 在github上创建一个仓库,再克隆到本地也会像
git init一样默认创建一条分支,只不过名字叫main
| 命令 | 说明 |
|---|---|
| git branch | 查看分支 -r远程分支、-a本地和远程分支 |
| git branch [name] | 创建分支 |
| git checkout [name] | 切换分支 |
| git push [shortName] [name] | 推送至远程仓库分支 |
| git merge [name] | 合并分支(将指定分支合并到当前分支) |
| git branch -d [name] | 删除分支 |
? 为啥要把分支推送远程仓库,git push时不会把分支推送上去吗
git push默认只推送当前分支到它已关联的远程分支。如果你新建了一个本地分支,它默认没有关联远程分支,所以
git push不会自动创建远程分支 ------ 你需要显式操作一次。
2.6标签操作
Git中的标签指的是某个分支某个特定时间点的状态。
通过标签,可以方便的切换到标记时的状态。
eg:用这个功能来标记发布结点(v1.0、v1.1)
| 命令 | 说明 |
|---|---|
| git tag | 列出已有的标签 |
| git tag [name] | 创建标签 |
| git push [shortName] [name] | 将标签推送至远程仓库 |
| git checkout -b [branch] [name] | 检出标签到一个分支 |
四.Git-idea集成
1.配置

找到idea的全局设置,选择Version Control下的Git,选择你的git.exe文件,点击Text若下方出现Git版本号则配置成功
2.本地仓库操作
2.1创建仓库
法一 :本地初始化仓库

选择Create Git Repository
法二:远程克隆

退出项目选择Clone Repository
2.2基本操作
-
add
idea自动把文件add到暂存区
-
commit
.gitignore文件:告知idea哪些不要提交
配置好该文件再点击菜单栏上Git的√就可快速提交
或者右键根目录,选择Git,选择commit


3.远程仓库操作
3.1查看远程仓库


3.2添加远程仓库
在上一节那个Git Remotes窗口里添加
也可以在Terminal输入指令进行添加
git remote add gitee https://gitee.com/CoderRan_111/sky-take-out.git
3.3推送至远程仓库
从上方菜单栏的Git选项内的push进行推送

3.4从远程仓库拉取
与push同理

4.冲突解决
情况1:操作不同文件,但是在你push之前,其他人push了新版本,你原先的版本已经旧了
当你想push时,不会引起内容冲突(content conflict),但 Git 会拒绝你的 push,要求你先同步远程更新
解决方法: 先 git pull(自动合并),再 push
Pull 时无冲突就自动完成
情况2:操作同一个文件,但是在你push之前,其他人push了,此时你pull+push就可能发生冲突
是否发生冲突取决于修改是否"重叠":
| 情况 | 是否冲突 | 说明 |
|---|---|---|
| 你们改的是文件不同部分(如你改第10行,他改第100行) | 无冲突 | Git 自动合并成功 |
| 你们改的是同一行或相邻行 | 有冲突 | Git 无法决定保留谁的代码 |
解决方法:手动决定最终使用谁的