git概念及操作¶
上传件:
git概念及操作.md(原文件可下载)。
git概念及操作¶
一、 基本概念¶
1. Git 是什么¶
Git 是目前世界上最先进的分布式版本控制系统
Git 近乎所有操作都是本地执行
2. Git 优点¶
版本库本地化,本地仓库是服务器仓库的完整克隆,包括标签分支、版本记录等
支持离线提交,适合跨地域协同开发
分支切换快速高效、创建和销毁分支简单容易
由于Git在本地磁盘上就有项目的完整历史,所以在Git中绝大多数操作只需要访问本地文件和资源,不需要实时的与代码服务器连接
3. Git 文件状态¶

文件的三种状态
- 已修改
- 修改后的 git 仓库中的文件(新增文件、被修改的文件或被删除的文件)
- 已暂存
- git add ‘已修改’ 文件
- 已提交
- git commit ‘已暂存’ 文件,本地的代码同步到远程:git push
4. Git基本命令¶
| 命令 | 作用说明 | 适用场景 |
|---|---|---|
git status |
查看当前文件状态 | 看哪些文件新增 / 修改 / 删除 |
git add 文件名 |
添加单个文件到暂存区 | 只提交某个文件 |
git add 文件夹名/ |
添加整个文件夹 | 批量提交目录下所有文件 |
git add . |
添加所有改动 | 新增 / 修改 / 删除全部提交(最常用) |
git commit -m "备注" |
提交到本地仓库 | 必须写备注,如:更新文档 |
git push |
推送到 GitLab 云端 | 本地同步到远程 |
git pull |
拉取云端最新内容 | 多设备同步、更新文件 |
git mv 旧名 新名 |
重命名文件 / 文件夹 | 让 Git 正确记录移动 / 改名 |
git mv 文件 目标文件夹/ |
移动文件到文件夹 | 仓库内移动文件,不乱历史 |
git rm 文件名 |
删除文件并让 Git 记录 | 删除后需要 commit |
git rm -r 文件夹名/ |
删除文件夹并让 Git 记录 | 递归删除目录 |
git reset |
取消 git add |
不想提交了,撤回暂存 |
| git reset (--mixed) HEAD~1 | 取消com | |
git checkout -- 文件名 |
丢弃文件本地修改 | 恢复成上次提交的版本 |
git diff |
查看文件具体改了什么 | 对比修改前后内容 |
git --version # 查看 Git 版本
git config --global user.name yourname # 配置用户名
git config --global user.email name@mail.com # 配置Email
git config -l # 查看配置信息
git config --global credential.helper “cache” # HTTPS 传输方式配置
#SSH 配置
#生成 ssh-key ssh-keygen(根据ssh-keygen命令,会在本地产生一对秘钥,公钥是以.pub为后缀的文件,把公钥中的内容粘贴到服务器中,就可以使用SSH进行通信了)
#将 public key 添加到 remote 仓库
#添加 ssh 配置(~/.ssh/config)
#格式
#权限 600
.gitignore 文件的位置 # 配置忽略文件
| 规则 | 作用 |
|---|---|
| /mtk/ | 过滤整个文件夹 |
| *.zip | 过滤所有 .zip 文件 |
| /mtk/do.c | 过滤某个具体文件 |
| !/mtk/one/txt | 追踪(不过滤)某个具体文件 |
git init # 创建第一个代码库
git clone ssh/httpsurl #从远端克隆仓库到本地
git remote -v # 查看所有的远程仓库名及别名
git remote add remote-name remote_url # 添加远程仓库
git remote rename old-remote-name new-remote-name # 修改远程仓库命名
git remote remove remote-name # 删除远程仓库
git branch # 查看本地所有分支
git branch -v # 查看分支的最新的提交
git branch -vv # 查看当前所有本地分支绑定的远程上游分支
git branch -a # 查看所有分支包括远程分支
git branch -m master main # 更改本地主master 分支为main
git checkout branch_name # 切换分支
git checkout -b new_branch #创建新的分支
git branch new_branch --track remote-name/remote-branch #基于远程仓库的分支创建新的分支
git branch -d branch_name # 删除分支
git push origin --delete master # 删除远程分支
git fetch --prune # 清理本地不存在的远程分支引用
git log # 检查本地是否存在提交记录
5. Git 分支¶
分支
- 本质上是个指向 commit 对象的可变指针
- 分支的默认名字为 master
- 每次提交的时候都会自动向前移动
- 作用:从某个提交对象往回看的历史
6 Git 自动同步¶
# 下载git-auto-sync
https://github.com/GitJournal/git-auto-sync
# 下载解压后添加Windows PATH
# 以管理员身份运行Git Bash
git-auto-sync daemon add "C:\Users\86176\Desktop\studydoc"
git-auto-sync daemon status
# 新增文件/夹后需要手动sync
git-auto-sync sync
7 git 初始化项目¶
7.1 Create a new repository¶
git clone git@gitlab.rainchen.top:root/studydoc.git
cd studydoc
git switch -c main
touch README.md
git add README.md
git commit -m "add README"
git push -u origin main
[^-u = --set-upstream 把本地的 main 分支,和远程仓库 origin 上的 main 分支永久绑定关联,只需要执行一次]:
[^origin 是远程仓库的默认别名]:
7.2 Push an existing folder¶
cd existing_folder
git init --initial-branch=main
git remote add origin git@gitlab.rainchen.top:root/studydoc.git
git add .
git commit -m "Initial commit"
git push -u origin main
7.3 Push an existing Git repository¶
cd existing_repo
rm -rf .git # 清空原有配置
git init --initial-branch=main
#git remote set-url origin ssh://git@gitlab.rainchen.top:22224/root/studydoc.git
#git remote rename origin old-origin
git remote add origin ssh://git@gitlab.rainchen.top:22224/root/studydoc.git
git add .
git commit -m "Initial commit"
git push -u origin main
7.4 一些排查命令¶
ssh -p 22224 -i ~/.ssh/id_ed25519 git@gitlab.rainchen.top # 查看ssh key密钥是否能正确识别
GIT_SSH_COMMAND="ssh -p 22224" git ls-remote ssh://git@[gitlab.rainchen.top]:22224/root/studydoc.git# 手动测试仓库路径是否可识别(直接访问仓库 API 校验)
8 gitignore¶
作用:
在仓库根目录新建一个名叫 .gitignore 的文件(前面必须带点),告诉 Git:哪些文件 / 文件夹不要纳入版本管理、不要提交到 GitLab
在项目根目录创建:
touch .gitignore
8.1 基础匹配语法¶
# 井号是注释,Git不会执行这一行
# 1. 所有以 .log 结尾的文件
*.log
# 2. 只忽略【仓库根目录】下的dist文件夹,子文件夹里的dist不忽略
/dist
# 3. 所有层级叫 venv 的文件夹全部忽略(最常用)
venv/
# 4. 单个具体文件
config.local.yaml
# 5. 通配单个字符
temp?.txt # temp1.txt tempA.txt 都会忽略
# 6. 取反:前面规则忽略了,但这个文件强制要提交
!keep-this.txt
8.2 文件已经提交过了,再加 ignore 不生效¶
如果venv、.idea之前已经被提交过,写入.gitignore不会自动取消追踪,需要执行这条命令删除本地缓存
# 取消文件夹追踪(不会删除本地真实文件)
git rm --cached -r venv/
git rm --cached -r .idea/
# 提交这次变更
git add .
git commit -m "remove tracked env and idea folder"
git push
# 查看哪些文件会被忽略
git check-ignore *
8.3 全局忽略(本机所有 Git 仓库统一生效)¶
# 配置全局忽略文件路径
git config --global core.excludesfile ~/.gitignore_global