跳转至

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